chrischtoph
Goto Top

Server 2016 - neue User per Powershell Script anlegen

Hallo,

ich hab mich an einem Skript für Powershell probiert um mehrere User über eine csv-Datei auf dem Server anzulegen. Erst kam keine Fehlermeldung aber nachdem ich die einzulesenden Daten in Powershell hab anzeigen lassen, kam folgende Meldung schon beim ersten Benutzer:

Verarbeite Benutzer: AbromeitF
Fehler beim Erstellen von Benutzer AbromeitF: Eigenschaft "SamAccountName" wurde im Objekt vom Typ "System.Man
agement.Automation.PSCustomObject" nicht gefunden.

Das Skript sieht so aus:
 # Pfad zur OU
$ouDN = "OU=AlleSchueler,OU=Abschluss30,DC=fcsnetz,DC=local"  

# Pfad zur CSV-Datei
$csvPath = "C:\Users\Administrator.FCSNETZ\Desktop\neue5er.csv"  

# Importiere die Benutzerinformationen aus der CSV-Datei mit Semikolon als Trennzeichen
$users = Import-Csv -Path $csvPath -Delimiter ";"  

# Überprüfen Sie die eingelesenen Benutzerinformationen
#hier hatte ich mir die Liste anzeigen lassen, was auch funktionierte

# Einheitliches Passwort für alle Benutzer (direkt als SecureString)
$securePassword = ConvertTo-SecureString "sommer5" -AsPlainText -Force  

# Schleife durch die Benutzerliste und erstelle jeden Benutzer
foreach ($user in $users) {
    Write-Host "Verarbeite Benutzer: $($user.SamAccountName)"  
    
    # Überprüfen, ob der Benutzer bereits existiert
    try {
        $existingUser = Get-ADUser -Filter {SamAccountName -eq $user.SamAccountName} -ErrorAction SilentlyContinue
        
        if ($existingUser) {
            Write-Host "Benutzer $($user.SamAccountName) existiert bereits, wird übersprungen."  
        } else {
            # Neuen Benutzer in Active Directory erstellen
            New-ADUser `
                -SamAccountName $user.SamAccountName `
                -UserPrincipalName "$($user.SamAccountName)@fcsnetz.local" `  
                -Name "$($user.GivenName) $($user.Surname)" `  
                -GivenName $user.GivenName `
                -Surname $user.Surname `
                -DisplayName $user.DisplayName `
                -AccountPassword $securePassword `
                -Enabled $true `
                -Path $ouDN `
                -ChangePasswordAtLogon $true `
                -PasswordNeverExpires $true
            
            Write-Host "Benutzer $($user.SamAccountName) wurde erfolgreich erstellt."  
        }
    } catch {
        Write-Host "Fehler beim Erstellen von Benutzer $($user.SamAccountName): $_"  
    }
}

Write-Host "Skript abgeschlossen."  

kann jmd helfen?

Content-Key: 33866642906

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

Printed on: August 15, 2024 at 22:08 o'clock

Member: Vision2015
Vision2015 Aug 15, 2024 at 19:18:51 (UTC)
Goto Top
Moin...

kannst du das mal ordentlich in den Code Tag posten!
$ouDN = "OU=AlleSchueler,OU=Abschluss30,DC=fcsnetz,DC=local"  

Frank
Member: Chrischtoph
Chrischtoph Aug 15, 2024 at 19:25:56 (UTC)
Goto Top
PS C:\Users\Administrator.FCSNETZ> # Pfad zur OU
$ouDN = "OU=AlleSchueler,OU=Abschluss30,DC=fcsnetz,DC=local"  

# Pfad zur CSV-Datei
$csvPath = "C:\Users\Administrator.FCSNETZ\Desktop\neue5er.csv"  

# Importiere die Benutzerinformationen aus der CSV-Datei mit Semikolon als Trennzeichen
$users = Import-Csv -Path $csvPath -Delimiter ";"  

# Überprüfen Sie die eingelesenen Benutzerinformationen


# Einheitliches Passwort für alle Benutzer (direkt als SecureString)
$securePassword = ConvertTo-SecureString "sommer5" -AsPlainText -Force  

# Schleife durch die Benutzerliste und erstelle jeden Benutzer
foreach ($user in $users) {
    Write-Host "Verarbeite Benutzer: $($user.SamAccountName)"  
    
    # Überprüfen, ob der Benutzer bereits existiert
    try {
        $existingUser = Get-ADUser -Filter {SamAccountName -eq $user.SamAccountName} -ErrorAction SilentlyContinue
        
        if ($existingUser) {
            Write-Host "Benutzer $($user.SamAccountName) existiert bereits, wird übersprungen."  
        } else {
            # Neuen Benutzer in Active Directory erstellen
            New-ADUser `
                -SamAccountName $user.SamAccountName `
                -UserPrincipalName "$($user.SamAccountName)@fcsnetz.local" `  
                -Name "$($user.GivenName) $($user.Surname)" `  
                -GivenName $user.GivenName `
                -Surname $user.Surname `
                -DisplayName $user.DisplayName `
                -AccountPassword $securePassword `
                -Enabled $true `
                -Path $ouDN `
                -ChangePasswordAtLogon $true `
                -PasswordNeverExpires $true
            
            Write-Host "Benutzer $($user.SamAccountName) wurde erfolgreich erstellt."  
        }
    } catch {
        Write-Host "Fehler beim Erstellen von Benutzer $($user.SamAccountName): $_"  
    }
}

Write-Host "Skript abgeschlossen."  
Member: bacardi
bacardi Aug 15, 2024 updated at 21:50:04 (UTC)
Goto Top
Moin.
Filter mit curly braces sind besonders, hier funktionieren nur ganze Variablen kein Abrufen von Eigenschaften einer Variablen, deswegen auch der Fehler, schreibe den Filter stattdessen so
# ....
$existingUser = Get-ADUser -Filter "SamAccountName -eq '$($user.SamAccountName)'" -EA SilentlyContinue  
# ....

Resultat:
$ErrorActionPreference = 'Stop'  
# Pfad zur OU
$ouDN = "OU=AlleSchueler,OU=Abschluss30,DC=fcsnetz,DC=local"    

# Pfad zur CSV-Datei
$csvPath = "C:\Users\Administrator.FCSNETZ\Desktop\neue5er.csv"    

# Importiere die Benutzerinformationen aus der CSV-Datei mit Semikolon als Trennzeichen
$users = Import-Csv -Path $csvPath -Delimiter ";"    

# Einheitliches Passwort für alle Benutzer (direkt als SecureString)
$securePassword = ConvertTo-SecureString "sommer5" -AsPlainText -Force    

# Schleife durch die Benutzerliste und erstelle jeden Benutzer
foreach ($user in $users) {
    Write-Host "Verarbeite Benutzer: $($user.SamAccountName)"    
    
    # Überprüfen, ob der Benutzer bereits existiert
        if (Get-ADUser -Filter "SamAccountName -eq '$($user.SamAccountName)'" -EA SilentlyContinue) {  
            Write-Host "Benutzer $($user.SamAccountName) existiert bereits, wird übersprungen."    
        } else {
            # Neuen Benutzer in Active Directory erstellen
           try {
                New-ADUser `
                -SamAccountName $user.SamAccountName `
                -UserPrincipalName "$($user.SamAccountName)@fcsnetz.local" `    
                -Name "$($user.GivenName) $($user.Surname)" `    
                -GivenName $user.GivenName `
                -Surname $user.Surname `
                -DisplayName $user.DisplayName `
                -AccountPassword $securePassword `
                -Enabled $true `
                -Path $ouDN `
                -ChangePasswordAtLogon $true `
                -PasswordNeverExpires $true
            
                Write-Host "Benutzer $($user.SamAccountName) wurde erfolgreich erstellt."    
           } catch {
                Write-Host "Fehler beim Erstellen von Benutzer $($user.SamAccountName): $_"    
           }
      }
}

Write-Host "Skript abgeschlossen."    

Gruß
Member: Chrischtoph
Chrischtoph Aug 15, 2024 updated at 20:25:01 (UTC)
Goto Top
danke - das war schon mal wichtig aber jetzt kommt folgendes
Verarbeite Benutzer: AbromeitF
Verzeichnisobjekt nicht gefunden.


aber die Benutzer existieren eben noch nicht
Member: Celiko
Celiko Aug 15, 2024 updated at 21:28:26 (UTC)
Goto Top
Naja, du sagst in Zeile 22, dass die Variable $existingUser in der AD nach dem Benutzer suchen soll...
Dann nutzt du auch noch diese Variable, die keinen Wert hat, um einen User zu erstellen.

PS C:\Users\Administrator.FCSNETZ> # Pfad zur OU
$ouDN = "OU=AlleSchueler,OU=Abschluss30,DC=fcsnetz,DC=local"      

# Pfad zur CSV-Datei
$csvPath = "C:\Users\Administrator.FCSNETZ\Desktop\neue5er.csv"      

# Importiere die Benutzerinformationen aus der CSV-Datei mit Semikolon als Trennzeichen
$users = Import-Csv -Path $csvPath -Delimiter ";"      

# Überprüfen Sie die eingelesenen Benutzerinformationen


# Einheitliches Passwort für alle Benutzer (direkt als SecureString)
$securePassword = ConvertTo-SecureString "sommer5" -AsPlainText -Force      

# Schleife durch die Benutzerliste und erstelle jeden Benutzer
foreach ($user in $users) {
    Write-Host "Verarbeite Benutzer: $($user.SamAccountName)"      
    
    # Überprüfen, ob der Benutzer bereits existiert
    if (Get-ADUser -Filter "SamAccountName -eq '$($user.SamAccountName)'")    
        { Write-Host "Benutzer existiert, mache nix" }    
    else {
        # Neuen Benutzer in Active Directory erstellen
        New-ADUser `
            -SamAccountName $user.SamAccountName `
            -UserPrincipalName "$($user.SamAccountName)@fcsnetz.local" `  
            -Name "$($user.GivenName) $($user.Surname)" `  
            -GivenName $user.GivenName `
            -Surname $user.Surname `
            -DisplayName $user.DisplayName `
            -AccountPassword $securePassword `
            -Enabled $true `
            -Path $ouDN `
            -ChangePasswordAtLogon $true `
            -PasswordNeverExpires $true
            
        Write-Host "Benutzer $($user.SamAccountName) wurde erfolgreich erstellt."      
    }
} 
Write-Host "Skript abgeschlossen."      

VG