Das Ermitteln von Benutzeranmeldeinformationen in PowerShell kann recht knifflig sein, insbesondere wenn man sie vor bestimmten Aktionen überprüfen möchte. Es ist ärgerlich, wenn das Skript einfach weiterläuft, ohne einen ungültigen Login frühzeitig zu erkennen – dann kommt es zu Fehlern oder Zugriffsverweigerungen. Der Trick besteht darin, eine Möglichkeit zu schaffen, Benutzername und Passwort direkt vor der Ausführung sensibler Daten auf Gültigkeit zu prüfen. So erhält man sofortiges Feedback und vermeidet Folgefehler.
Die Verwendung von PowerShell zum Testen von AD-Anmeldeinformationen ohne das Active Directory PowerShell-Modul – was manche als Vorteil sehen, da es auf jedem Windows-Rechner, sogar in einer Arbeitsgruppe, funktioniert – ist recht einfach, sobald man sich damit vertraut gemacht hat. Im Prinzip geht es darum, ein DirectoryEntryObjekt mit dem angegebenen Benutzernamen und Passwort zu erstellen. Wenn dies gelingt (d.h., es wird kein Fehler ausgegeben und ein gültiger Name zurückgegeben), sind die Anmeldeinformationen wahrscheinlich korrekt.
So überprüfen Sie Active Directory-Benutzeranmeldeinformationen in PowerShell
Methode 1: Grundlegende Anmeldeinformationsvalidierung mit DirectoryEntry
Diese Methode eignet sich, um ohne zusätzliche Module zu prüfen, ob die Kombination aus Benutzername und Passwort für Ihre aktuelle Domäne gültig ist. Sie ist besonders in Domänenumgebungen hilfreich, wenn Sie eine schnelle Validierung benötigen. Sind die Anmeldedaten korrekt, gibt das Skript „True“ zurück, andernfalls „False“.
Bei manchen Konfigurationen kann dies einen Fehler auslösen, wenn die Anmeldeinformationen ungültig sind. Daher ist es ratsam, den Code in einen try-catch-Block einzuschließen. Der Einfachheit halber ist dies jedoch die Kernidee:
$creds = Get-Credential Function Test-ADCreds { param ($username, $password) try { return (New-Object DirectoryServices. DirectoryEntry "", $username, $password).psbase.name -ne $null } catch { return $false } } Test-ADCreds -username $creds. UserName -password $creds. GetNetworkCredential().Password
Führen Sie diesen Befehl einfach aus, geben Sie Ihre Domänenanmeldeinformationen ein und prüfen Sie, ob er „True“ zurückgibt. Wenn ja, sind die Anmeldeinformationen gültig. Andernfalls wissen Sie, dass entweder Benutzername oder Passwort falsch sind oder das Konto gesperrt bzw.deaktiviert ist.Übrigens funktioniert dieser Befehl auch auf Rechnern, auf denen das Active Directory-Modul möglicherweise nicht installiert ist, da er nicht davon abhängt – er verwendet ausschließlich native. NET-Klassen.
Methode 2: Verbindung zu einer bestimmten Domäne oder einem LDAP-Server
Wenn Sie mit einem Domänencontroller oder einem Rechner außerhalb Ihrer Domäne arbeiten (oder eine Authentifizierung an einem bestimmten LDAP-Server durchführen möchten), müssen Sie die LDAP-Zeichenfolge direkt angeben. Das ist etwas ungewöhnlich: Sie müssen den LDAP-Pfad so ändern, dass er auf Ihre Domäne oder Ihren Domänencontroller verweist, etwa so:
(New-Object System. DirectoryServices. DirectoryEntry 'LDAP://DC=woshub, DC=loc', $username, $password).psbase.name -ne $null
Oder, falls Sie die Verbindung über IP herstellen, ist es ähnlich:
(New-Object System. DirectoryServices. DirectoryEntry 'LDAP://192.168.100.10', $username, $password).psbase.name -ne $null
So können Sie Anmeldeinformationen auf verschiedenen Servern oder in unterschiedlichen Netzwerkumgebungen überprüfen. Beachten Sie: Befindet sich der Benutzer in der Gruppe „Geschützte Benutzer“, müssen Sie wahrscheinlich den Benutzerprinzipalnamen (im E-Mail-Format) verwenden domain\username. Bei korrekter Konfiguration greift Kerberos, was in manchen Fällen sicherer und zuverlässiger als NTLM ist.
Denn Windows macht die Dinge natürlich gerne etwas komplizierter als nötig, aber mit diesem Ansatz kann man Anmeldeinformationen so gut wie ohne viele zusätzliche Module überprüfen.