Powershell Benutzer aus CSV Datei erstellen – ganz einfach

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:

Powershell ISE Benutzer aus CSV erstellen
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:

Schreibe einen Kommentar