#Original by --> http://www.howtogeek.com/50187/how-to-create-multiple-users-in-server-2008-with-powershell/ #Edited by --> http://www.ewig-drohendes-versagen.de #Statische Import OU $staticObjOU=[ADSI]“LDAP://OU=import,DC=company,DC=com” #Counter auf 0 setzen $accountCount=0 $userCount=0 $errorCount=0 #Import Datei $dataSource=import-csv “users.csv” foreach($dataRecord in $datasource) { #Fehlerstatus zurücksetzten $error="FALSE" #Counter erhöhen $userCount=$userCount + 1 #Dynamische Import OU auf Basis der Spalte OU $userOU=$dataRecord.OU if ($userOU -ne “”) { $objOU=[ADSI]“LDAP://OU=$userOU,OU=import,DC=company,DC=com” } #Wenn OU Feld leer ist - die Static OU nehmen else { $userOU=$staticObjOU } #Auslesen der Werte und Setzen der Variablen $cn=$dataRecord.sn + ” ” + $dataRecord.GivenName $sAMAccountName=$dataRecord.GivenName + “.” + $dataRecord.sn ##Überprüfen on der SAM Name nicht länger als 20 Zeichen wird - ansonsten nur erstes Zeichen des Vornamens nehmen if ($sAMAccountName.Length -ge 20) { $sAMAccountName=$dataRecord.GivenName.Substring(0,1) + “.” + $dataRecord.sn ##Wenn immer noch SAM Name immer noch mehr als 20 Zeichen - erstes Zeichen Vorname + 18 Zeichen Nachname if ($sAMAccountName.Length -ge 20) { $sAMAccountName=$dataRecord.GivenName.Substring(0,1) + “.” + $dataRecord.sn.Substring(0,18) } } ##wandele den SAM Namen in kleine Buchstaben $sAMAccountName=$sAMAccountName.ToLower() #weiter Werte auslesen $givenName=$dataRecord.GivenName $sn=$dataRecord.sn $displayName=$sn + “ ” + $givenName #Achtung statischer UPN Suffix! $userPrincipalName=$givenName + “.” + $sn + “@company.com” $Description=$dataRecord.Description $Department=$dataRecord.Department $telephoneNumber=$dataRecord.telephoneNumber $Title=$dataRecord.Title #Statische Werte setzen $userPassword="P@ssw0rd" $company=”Company AG” $HomeDirRoot=”\\FILESERVER\Home$\” $HomeDrive=”H:” $ProfilePathRoot=”\\FILESERVER\Profile$\” $ScriptPath=”AnmeldeScript.bat” #ab hier wird das Objekt zusammengebaut ##versuche das Objekt zu erstellen try { $objUser=$objOU.Create(“user”,”CN=”+$cn) } catch { $errorItem="FEHLER: " + $sAMAccountName + " - " + "Konnte nicht erstellt werden da Pfad oder Name der OU falsch" $errorItems=@($errorItems + $errorItem) continue } $objUser.Put(“sAMAccountName”,$sAMAccountName) $objUser.Put(“userPrincipalName”,$userPrincipalName) #ab hier auch prüfen ob Wert evtl leer ist if ($displayName -ne “”) {$objUser.Put(“displayName”,$displayName)} if ($givenName -ne “”) {$objUser.Put(“givenName”,$givenName)} if ($sn -ne “”) {$objUser.Put(“sn”,$sn)} if ($company -ne “”) {$objUser.Put(“company”,$company)} if ($Description -ne “”) {$objUser.Put(“Description”,$Description)} if ($Department -ne “”) {$objUser.Put(“Department”,$Department)} if ($telephoneNumber -ne “”) {$objUser.Put(“telephoneNumber”,$telephoneNumber)} if ($Title -ne “”) {$objUser.Put(“Title”,$Title)} if ($userPrincipalName -ne “”) {$objUser.Put(“mail”,$userPrincipalName)} if ($ScriptPath -ne “”) {$objUser.Put(“ScriptPath”,$ScriptPath)} #Pfade für Benutzer setzten $objUser.Put(“HomeDirectory”,$HomeDirRoot + $sn + “.” + $givenName ) $objUser.Put(“HomeDrive”,$HomeDrive) $objUser.Put(“ProfilePath”,$ProfilePathRoot + $sn + “.” + $givenName ) # Versuche das Benutzerobjekt zu erstellen if ($error -eq "FALSE") { try { $objUser.SetInfo() } #Fehlerbehandlung catch { $ErrorMessage = $_.Exception.Message #$errorItem="FEHLER: " + $sAMAccountName + " - " + $ErrorMessage $errorItem="FEHLER: " + $sAMAccountName + " - " + "Konnte nicht erstellt werden, da das Objekt bereits vorhanden ist." $errorItems=@($errorItems + $errorItem) continue } #Versuche das Password zu setzen und aktiviere das Benutzerkonto try { $objUser.SetPassword($userPassword) $objUser.psbase.InvokeSet(“AccountDisabled”,$false) $objUser.SetInfo() $accountCount=$accountCount + 1 } #bei Fehler deaktivere das Benutzerkonto wieder catch { $objUser.psbase.InvokeSet(“AccountDisabled”,$true) $errorItem="Warnung: " + $sAMAccountName + " - " + "Password konnte nicht gesetzt werden. Benutzer wurde deaktiviert." $errorItems=@($errorItems + $errorItem) continue } } } #Meldung ausgeben if ($errorItems -ne "") { Foreach ($item in $errorItems) { write-host $item -foregroundcolor "red" } } #Statistik ausgeben $errorCount=$errorItems.Length write-host "Es wurden: $userCount Benutzer eingelesen" write-host "Es wurden: $accountCount Benutzer Konten erstellt" write-host "Es wurden: $errorCount Fehler festgestellt"