windelterrorist
Goto Top

Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen

Hallo Admins face-smile

Mein Skript soll mehrere AD User aus einer CSV Datei per PowerShell erstellen. Soweit funktioniert das jeweils nur mit dem ersten Benutzer in der CSV-Datei, sprich mit dem ersten Eintrag. (Max Muster)

Danach erscheint diese Meldung fast endless (er versucht die erste Zeile wohl nochmal und nochmal zu erstellen):
New-ADUser : Das angegebene Konto ist bereits vorhanden
In C:\temp\AD_User_erstellen_edit.ps1:50 Zeichen:5
+     New-ADUser -Name $FullName -SamAccountName $username.ToLower() `
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (CN=Max Muster,O...abproj,DC=local:String) [New-A 
   DUser], ADIdentityAlreadyExistsException
    + FullyQualifiedErrorId : ActiveDirectoryServer:1316,Microsoft.ActiveDirectory.Management.C 
   ommands.NewADUser
 
new-item : Ein Element mit dem angegebenen Namen "C:\Demo_User\Max.Muster" ist bereits   
vorhanden.
In C:\temp\AD_User_erstellen_edit.ps1:46 Zeichen:5
+     new-item -Path "C:\Demo_User\" -name "$Username" -ItemType directory  
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (C:\Demo_User\Max.Muster:String) [New-Item], IOEx 
   ception
    + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand


Import-Module ActiveDirectory

# Pfad zur Benutzerliste
$PathUserList = "C:\temp\Demo\AD_User_Demo_3.csv"  


# Variablen setzen

$Domain = "labproj.local"  
$CustomerOU = "OU=Demo,OU=Benutzer,OU=Labor AG,DC=labproj,DC=local"  

$input = New-Object -TypeName System.IO.StreamReader($PathUserList);
$file = $input.ReadLine();
$UserList = Import-Csv -Delimiter ";" -Path $PathUserList  


#foreach ($User in $UserList)  
#{

while ($file -ne $null){

  	$file = $file.Split(";")  
			
	$surname    = $file
	$name	    = $file[1]
    $funktion   = $file[2]
  
    

    $FullName = $surname + " " + $name  
    $Username = $surname + "." + $name  

    # Random Passwort generieren
    $pw1 = -join ((97..120) | Get-Random -Count 4 | foreach {[char]$_})
    $pw2 = Get-Random
    $pw2 = ("-" + $pw2).Substring(0,5)  
    $password = $pw1 + $pw2

   
    # Homedirectory der User
    new-item -Path "C:\Demo_User\" -name "$Username" -ItemType directory  
    $Directory = "C:\Demo_User\" + $Username  


    New-ADUser -Name $FullName -SamAccountName $username.ToLower() `
    -AccountPassword (ConvertTo-SecureString -AsPlainText $password -force) -TrustedForDelegation $true `
    -HomeDirectory $Directory -PassThru -Path $CustomerOU -GivenName $name -Surname $surname -Description $funktion `
    -DisplayName $FullName -UserPrincipalName $username.ToLower() -ChangePasswordAtLogon $true -Enabled $true

}

Write-Host "Die Benutzer wurden im AD erfasst"  
Sleep 3



Seht Ihr hier einen Hacken? Mache ich einen Denkfehler?

Vielen Dank schonmal im Voraus!


Gruss
Michael
2016-10-20 15_21_45-filme & tv

Content-Key: 318548

Url: https://administrator.de/contentid/318548

Ausgedruckt am: 19.03.2024 um 02:03 Uhr

Mitglied: 131223
131223 20.10.2016 um 16:14:45 Uhr
Goto Top
$file = $input.ReadLine()
Logisch, du ließt nur einmal die erste Zeile ein und dann garnicht mehr, so bleibt das Teil in der Schleife hängen und benutzt immer nur die erste Zeile!

Wieso machst du das denn überhaupt mit einer while Schleife ???? Du hast es doch dort schon mit Import-CSV viel schöner/effektiver gemacht?!