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:
kann jmd helfen?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 33866642906
Url: https://administrator.de/contentid/33866642906
Ausgedruckt am: 03.12.2024 um 17:12 Uhr
7 Kommentare
Neuester Kommentar
Moin.
Filter mit curly braces sind besonders, hier funktionieren bei CustomObjects nur ganze Variablen kein Abrufen von Eigenschaften einer Variablen, deswegen auch der Fehler, schreibe den Filter stattdessen so
Resultat:
Gruß
Filter mit curly braces sind besonders, hier funktionieren bei CustomObjects 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ß
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.
VG
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
Moin,
Unsinn.
Selbstverständlich funktioniert der Abruf einer Objekteigenschaft in jedem Filter der PS.
Liebe Grüße
Erik
Zitat von @14135584197:
Moin.
Filter mit curly braces sind besonders, hier funktionieren bei CustomObjects nur ganze Variablen kein Abrufen von Eigenschaften einer Variablen
Moin.
Filter mit curly braces sind besonders, hier funktionieren bei CustomObjects nur ganze Variablen kein Abrufen von Eigenschaften einer Variablen
Unsinn.
PS U:\> $user = get-aduser username
PS U:\> get-aduser -filter {samaccountname -eq $user.samaccountname}
DistinguishedName : CN=[...]
Enabled : True
GivenName : Hans
Name : User, Hans
ObjectClass : user
ObjectGUID : 4b9dc892-fce9-49ec-b59e-f4e1c92d5b26
SamAccountName : username
SID : S-1-5-21-*
Surname : User
UserPrincipalName : [...]
Selbstverständlich funktioniert der Abruf einer Objekteigenschaft in jedem Filter der PS.
Liebe Grüße
Erik
Zitat von @erikro:
Unsinn.
Selbstverständlich funktioniert der Abruf einer Objekteigenschaft in jedem Filter der PS.
Unsinn.
PS U:\> $user = get-aduser username
PS U:\> get-aduser -filter {samaccountname -eq $user.samaccountname}
DistinguishedName : CN=[...]
Enabled : True
GivenName : Hans
Name : User, Hans
ObjectClass : user
ObjectGUID : 4b9dc892-fce9-49ec-b59e-f4e1c92d5b26
SamAccountName : username
SID : S-1-5-21-*
Surname : User
UserPrincipalName : [...]
Selbstverständlich funktioniert der Abruf einer Objekteigenschaft in jedem Filter der PS.
aber nicht in jedem Fall! Schau dir das bitte mal an:
$users = [pscustomobject]@{
Name = "MaxMuster"
SamAccountName = 'mmuster'
}
foreach($user in $users){
Get-ADUser -Filter {SamAccountName -eq $user.SamAccountName}
}
Fehler:
Get-ADUser : Eigenschaft "SamAccountName" wurde im Objekt vom Typ "System.Management.Automation.PSCustomObject" nicht gefunden.
In Zeile:7 Zeichen:5
+ Get-ADUser -Filter {SamAccountName -eq $user.SamAccountName}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ADUser], ArgumentException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADUser
Bei Objekten den Typs PSCustomObject bspw. funktioniert das eben gerade nicht, und der TO verwendet eben diese in seinem Code!
Hier wird das Problem damit auch nochmal aufgeführt.
https://stackoverflow.com/questions/20075502/get-aduser-filter-will-not- ...