Powershell Benutzer aus CSV Datei erstellen – ganz einfach
Oftmals kann es Sinn machen Benutzer aus einer CSV Datei zu importieren und dann automatisch anzulegen. Hierfür habe ich ein kleines Powershellskript geschrieben, welches ich euch hier zur Verfügung stelle. Das Skript ersetzt automatisch alle Umlaute in den Usernamen und verfügt über eine grundlegende Logging Funktion.
Desweiteren wird der Basisordner + Profilpfad jedes Benutzers angelegt und die Berechtigungen des Users auf den Ordner gesetzt. Die jeweiligen Ordner werden von dem Skript erstellt und müssen nicht in der CSV Datei vorhanden sein. Falls ein Benutzer schon existieren sollte, wird das mitgeloggt und mit dem nächsten Benutzer weitergemacht.
Das Skript wurde ursprünglich für eine Schule geschrieben, daher auch die Bezeichnungen Schüler und Klasse. Dieses Skript eignet sich aber auch für viele verschiedene Einsatzbereiche unter anderem auch große Firmen, wenn viel Personal eingestellt wird.
Die CSV Datei ist dabei nach folgendem Schema aufgebaut:
Klasse;Nachname;Vorname
07M;Müller;Hans
Das Skript muss direkt am Server ausgeführt werden, am einfachsten machst du das in der Powershell-ISE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
Clear-Host Import-Module ActiveDirectory -ErrorAction SilentlyContinue # $Liste = "PFAD" #Pfad zur CSV Datei $Liste_neu = "PFAD_tmp.txt" #temp. Datei welche für die richtige Codierung benötigt wird Type $Liste -Encoding:String |Out-File $Liste_neu -Encoding UTF8 #temp. Datei welche für die richtige Codierung benötigt wird (Wird vom Skript erstellt und anschließend gelöscht) # $Logfile = "PFAD\log.log" #Pfad zur LOG-Datei (Wird erstellt, falls nicht vorhanden) $Schueler = Import-Csv -Path $Liste_neu -Delimiter ";" #Einlesen der temp. Datei $Passwort = ConvertTo-SecureString -AsPlainText 'PASSWORT' -Force #Passwort definieren! # function Write-Log ($Text) #Funktion zum Log schreiben { if (-Not (Test-Path $Logfile)) {New-Item $Logfile | Out-Null} $Datum = Get-Date -format "yyyy-MM-dd HH:mm:ss" Write-Host "$Datum | $Text" Add-Content -Path $Logfile -Value "$Datum | $Text" } #Hier werden die Benutzernamen für das Active Directory erstellt, Umlaute werden ersetzt und die Ordnerpfade in die jeweiligen Variablen geschrieben foreach ($item in $Schueler) { $Fail = $false $Vorname = $item.Vorname $Nachname = $item.Nachname $Klasse = $item.Klasse $Username = $item.Vorname.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae').Replace(' ','').Replace(',','').Replace('.','').Replace('/','').Replace('\','').Replace('-','').ToLower()+'.'+$item.Nachname.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae').Replace(' ','').Replace(',','').Replace('.','').Replace('/','').Replace('\','').Replace('-','').ToLower() $Anzeigename = $item.Vorname+' '+$item.Nachname $Profilpfad = 'PFAD\'+$Username+'.V6' $Basisordner = 'PFAD\'+$Username if ((Get-ADUser -Filter {Name -eq $Anzeigename}) -eq $null) #Prüfung ob es den Benutzer schon gibt { try { New-ADUser ` -Name $Anzeigename ` -DisplayName $Anzeigename ` -SamAccountName $Username ` -GivenName $Vorname ` -Surname $Nachname ` -UserPrincipalName ($Username+'@DOMAIN.local') ` -Path "PFAD" ` -ProfilePath $Profilpfad ` -HomeDrive H: ` -HomeDirectory $Basisordner ` -AccountPassword $Passwort ` -Description $Klasse ` -Enabled $true # Write-Log -Text "$Username erstellt" } # catch { $Fail = $true Write-Log "BEI USER $Username IST WAS SCHIEF GELAUFEN! BITTE SELBER ANLEGEN (Vielleicht zu lange?)" } } # else {Write-Log "$Username BENUTZER EXISITIERT BEREITS!"} # #Hier werden die Ordner erstellt für Basisordner und Profilordner if (-Not (Test-Path -Path $Profilpfad)-and $Fail -eq $false){ New-Item -ItemType Directory -Path $Profilpfad | Out-Null $ACLVZ = Get-Acl $Profilpfad $ARVZ = new-object system.security.accesscontrol.filesystemaccessrule("DOMAIN\$Username","Modify", "ContainerInherit, ObjectInherit", "None", "Allow") $ACLVZ.SetAccessRule($ARVZ) Set-Acl $Profilpfad $ACLVZ Write-Log -Text "Ordner $Profilpfad angelegt, Berechtigungen gesetzt..." } else {Write-Log -Text "$Profilpfad : DER PFAD EXISTIERT BEREITS!"} # if (-Not (Test-Path -Path $Basisordner)-and $Fail -eq $false){ New-Item -ItemType Directory -Path $Basisordner | Out-Null $ACLVZ = Get-Acl $Basisordner $ARVZ = new-object system.security.accesscontrol.filesystemaccessrule("DOMAIN\$Username","Modify", "ContainerInherit, ObjectInherit", "None", "Allow") $ACLVZ.SetAccessRule($ARVZ) Set-Acl $Basisordner $ACLVZ Write-Log -Text "Ordner $Basisordner angelegt, Berechtigungen gesetzt..." } else {Write-Log -Text "$Basisordner : DER PFAD EXISTIERT BEREITS!"} } Remove-Item $Liste_neu |
Solltest du noch Fragen haben, zögere nicht diese in die Kommentare zu schreiben. Schaut auch auf dem YouTube-Kanal Kosilovs Blog vorbei, dort findest du auch viele interessante Inhalte rund um die IT-Welt.
Das könnte dich auch interessieren: