Einleitung
In diesem Artikel erläutern wir, wie Sie mithilfe des PowerShell-Cmdlets Get-ADUser überprüfen können, ob ein Benutzer im Active Directory vorhanden ist. Wir werden auf verschiedene Ansätze eingehen und mögliche Fallstricke behandeln.
Verifying an AD User Exists - Fehlerhafter Versuch eins
Sie könnten versucht haben, die Option "-ErrorAction Stop" zu verwenden oder eine "try {} catch {}" -Struktur zu implementieren, um einen Benutzer zu identifizieren, der nicht existiert. Hier ist ein Beispiel:
Import-Module ActiveDirectory
$SamAccountName = 'existiertNicht'
try {
$User = Get-ADUser -Filter { SamAccountName -eq $SamAccountName } -ErrorAction Stop
}
catch {
Write-Warning -Message "Benutzer existiert nicht."
}
Leider funktioniert dies nicht wie erwartet. Weder die Warnung noch das Stoppen der Ausführung bei Fehlern wird korrekt ausgeführt. Dies ist eine bekannte Unstimmigkeit in den AD-Cmdlets.
Verifying an AD User Exists - Erfolgreicher Versuch eins
Eine zuverlässige Methode besteht darin, die Ausgabe in ein Array zu zwingen und die Eigenschaft ".Count" zu überprüfen. Hier ein Beispiel:
if (@(Get-ADUser -Filter { SamAccountName -eq $SamAccountName }).Count -eq 0) {
Write-Warning -Message "Benutzer $SamAccountName existiert nicht."
}
Dieser Ansatz hat sich als zuverlässig erwiesen.
Verifying an AD User Exists - Erfolgreicher Versuch zwei
Eine weitere Möglichkeit besteht darin, das Ergebnis einfach in einen [bool]-Typ zu überführen und zu überprüfen, ob dieser "true" ist. Beispiel:
$SamAccountName = 'existiertNicht'
[bool] (Get-ADUser -Filter { SamAccountName -eq $SamAccountName }) # gibt "false" zurück
So können Sie in einer "if"-Anweisung überprüfen, ob ein Benutzer existiert.
Neues Verhalten
Seit März 2017 hat sich das Verhalten geändert, insbesondere auf einem Windows Server 2016 AD-Controller. Hier ein Beispiel:
$UserList = @("ExistiertNicht", "TestBenutzer0001")
foreach ($u in $UserList) {
try {
$ADUser = Get-ADUser -Identity $u -ErrorAction Stop
}
catch {
if ($_ -like "*Cannot find an object with identity: '$u'*") {
"Benutzer '$u' existiert nicht."
}
else {
"Ein Fehler ist aufgetreten: $_"
}
continue
}
"Benutzer '$($ADUser.SamAccountName)' existiert." # Führen Sie Aktionen mit $ADUser durch
}
Dies zeigt, wie Sie jetzt ohne "ErrorAction Stop" überprüfen können.
Fazit
In diesem Artikel haben wir verschiedene Methoden zur Überprüfung der Existenz eines Active Directory-Benutzers mit PowerShell vorgestellt. Wählen Sie die Methode, die am besten zu Ihren Anforderungen passt, und implementieren Sie sie effektiv in Ihren Skripten.