Aktive Verzeichnisbenutzer mit abgelaufenem Passwort finden (PowerShell)

Finde Active Directory Benutzer mit abgelaufenem Passwort (PowerShell). Sind Sie für die Verwaltung von Passwörtern in Ihrer Active Directory (AD)-Umgebung verantwortlich? Eine wichtige Aufgabe besteht darin, Benutzer zu identifizieren, deren Passwörter abgelaufen sind, da diese Benutzer sich nicht mehr in ihre Konten einloggen können, bis sie ihre Passwörter zurücksetzen. Dieser Artikel zeigt Ihnen, wie Sie effizient PowerShell verwenden können, um Active Directory-Benutzer mit abgelaufenen Passwörtern zu finden.

Sollen wir unseren Artikelblog über Find Active Directory Users with Expired Password (PowerShell) starten?

Finden Sie AD-Benutzer mit abgelaufenen Passwörtern mit PowerShell

Nach diesem Artikel spart Zeit und Mühe, da wir schnell spezifische Benutzer für Passwort zurücksetzen oder Ablaufbenachrichtigungen erreichen können. Egal, ob Sie ein Netzwerkadministrator sind oder einfach die Sicherheit Ihrer Active Directory-Umgebung verbessern möchten, dieser Leitfaden bietet die Informationen, die Sie benötigen, um loszulegen.

Voraussetzungen

Wenn wir vorhaben, diesem Artikel zu folgen, benötigen wir Folgendes:

  • A Windows computer joined to an Active Directory domain.
  • Installiertes ActiveDirectory-Modul auf dem Computer.
  • Der Computer muss außerdem mindestens Windows PowerShell 5.1 oder höher haben.

Benutzer in Active Directory finden

Bevor ein Benutzerpasswort zurückgesetzt wird, müssen wir zuerst das Konto lokalisieren. Unser erster Schritt sollte daher sein zu bestimmen, ob eine Reserve existiert. Dazu führen Sie das Get-ADUser cmdlet mit dem Identity Parameter, der auf den Kontonamen gesetzt ist, aus.

Der Identity Parameter akzeptiert einen von vier Identifikatoren: distinguished name (DN), GUID (objectGUID), Sicherheits-ID (objectSID) oder SAM-Kontoname (SAMAccountName).

Zum Beispiel, wenn wir das Passwort für einen bestimmten Benutzer zurücksetzen möchten, sollten wir zuerst überprüfen, ob der Benutzer existiert, bevor wir einen Kontoreset durchführen. Dazu kopieren Sie den folgenden Befehl und fügen Sie ihn in unsere PowerShell Konsole ein. Vergewissern Sie sich, dass Sie zuerst den Benutzernamen korrekt ändern:

Get-ADUser -Identity

Der Befehl gab die Benutzereigenschaften zurück, wie im untenstehenden Screenshot gezeigt, und bestätigt, dass das Konto existiert und der Benutzername korrekt ist:

Benutzer mit abgelaufenen Passwörtern in AD finden

Wir können das Passwort-Ablaufdatum für einen einzelnen Benutzer schnell abrufen, indem wir das Attribut `msDS-UserPasswordExpiryTimeComputed` mit dem Befehl `Get-ADUser` anhängen und verwenden:

Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'

Aber diese Codezeile ergibt eine für Menschen unlesbare Ausgabe, daher müssen wir die folgende Zeile hinzufügen, um die Ergebnisse in ein lesbares Format zu konvertieren. Um die folgende Zeile hinzuzufügen, verwenden wir den Befehl Select-Object -Property in einer neuen PowerShell-Pipeline:

Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}

Wenn wir dasselbe Attribut, `msDS-UserPasswordExpiryTimeComputed`, mit dem richtigen Filter ausführen, erhalten wir eine Liste von Active Directory-Konten und deren Passwort-Ablaufzeiten:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Wir verbessern das obige Skript, indem wir die Liste der Benutzer in eine Textdatei exportieren, die wir später verwenden könnten. Hierzu können wir den Befehl Out-File verwenden, der die Ausgabe an eine Textdatei sendet:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt

Das obige Skript generiert eine Datei namens userslist.txt, die wir später verwenden können. Wir haben außerdem die Eigenschaft ExpiryDate aus der Ausgabe weggelassen, da wir nur die Benutzer-IDs von Konten benötigen, die abgelaufen sind. Wir verwenden diese Liste für die Massenkorrektur, die später im Artikel erläutert wird.

Zurücksetzen des Active Directory-Benutzerkennworts

Nachdem wir nun gelernt haben, wie man Get-ADUser verwendet, um ein Benutzerkonto zu verifizieren, wissen wir, dass das Ergebnis gültig ist und dass die Benutzer-ID existiert. Wir müssen jetzt das Set-ADAccountPassword-Cmdlet verwenden, um das Kennwort des Benutzers zurückzusetzen.

Der Set-ADAccountPassword-Befehl ändert das Kennwort eines Benutzers, wenn wir das alte Kennwort angeben. Wenn wir nicht über das alte Kennwort verfügen, setzt das Cmdlet es mit dem Parameter Reset zurück.

Das neue zufällig generierte Kennwort ist ein 14-stelliges zufälliges Kennwort mit fünf nicht alphanumerischen Zeichen. Um es auszuführen, öffnen Sie ein PowerShell-Fenster, kopieren Sie den Code, fügen Sie ihn in PowerShell ein und drücken Sie die Eingabetaste:

$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
  • Zeile 1: Gibt den Benutzernamen an, dessen Passwort zurückgesetzt werden soll. Stellen Sie sicher, dass Sie den USERNAME-String durch die tatsächliche Benutzer-ID ersetzen.
  • Zeile 2: Importiert die System.Web .NET Assembly-Objektklasse.
  • Zeile 3: Generiert ein zufälliges Passwort, das 14 Zeichen lang ist und fünf nicht alphanumerische Zeichen enthält.
  • Zeile 4: Konvertiert das Klartext-Passwort in ein sicheres String-Passwortobjekt.
  • Zeile 5: Erleichtert das Zurücksetzen des Passworts.
  • Zeile 6: Erzwingt, dass das AD-Konto bei der nächsten Anmeldung das Passwort ändert.
  • Zeile 7: Zeigt das neue Passwort in der Konsole an. Wir empfehlen dies jedoch aus Sicherheitsgründen nicht. Zeile 6 kümmert sich um die Passwortänderung nach den Wünschen des Benutzers und wird als bewährte Methode für dieses Verfahren angesehen.

Verbessern Sie Ihre Active Directory-Sicherheit & Azure AD

Probieren Sie uns aus kostenlos, Zugriff auf alle Funktionen. – 200+ AD-Berichtsvorlagen verfügbar. Passen Sie Ihre eigenen AD-Berichte einfach an.




Schreiben des Active Directory-Kennwortzurücksetzungstools

Wir haben jetzt ein Skript, das wir verwenden, um das Kennwort eines Benutzers zurückzusetzen. Der nächste Schritt besteht darin, unser Skript in ein Werkzeug umzuwandeln. Ein wiederverwendbares Werkzeug führt dieselben Aktionen mit minimaler manueller Benutzerinteraktion aus.

Beim Erstellen eines Werkzeugs ist ein entscheidender Aspekt, dass derjenige, der das Werkzeug ausführt, nicht jedes Mal den Code bearbeiten muss. Leider erfordert unser Code immer noch, dass der Benutzer die $username-Variable ändert.

Anstatt unseren Werkzeugbenutzern das manuelle Ändern der Werte zu ermöglichen, warum nicht ein Skript schreiben, das Parameter akzeptiert? Um dies zu tun, führen Sie die folgenden Schritte aus:

  1. Öffnen Sie Windows PowerShell ISE.
  2. Erstellen Sie eine neue PowerShell-Datei und speichern Sie die Datei unter dem Namen Reset-ADPassword.ps1. Speichern Sie das Skript an unserem bevorzugten Ort. In diesem Artikel wird die Datei im C:\PS\scripts Ordner gespeichert.
  3. Bitte kopieren Sie den unten stehenden Code in unseren Skript-Editor, bevor Sie das Skript speichern.
param (
     $username
 )

 if (-not($username)) {
     Write-Host "Username not found. Exiting script"
     return $null
 }

 try {
     $null = Get-ADUser -Identity $username -ErrorAction Stop
 } catch {
     Write-Host $_.Exception.Message
     return $null
 }

$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force

 try {
     Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
     Set-ADuser -Identity $username -ChangePasswordAtLogon $true

     [pscustomobject]@{
         Username = $username
         NewPassword = $randomPassword
     }
 } catch {
     Write-Host "There was an error performing the password reset. Please find additional information below."
     Write-host $_.Exception.Message
     return $null
 }
  • Zeile 1: Fügt ein Parameter namens  Benutzername.
  • Zeile 5: Prüft, ob der Benutzer einen Benutzernamenwert angegeben hat. Der if Block zeigt auch eine Nachricht an und beendet das Skript, wenn die Bedingung erfüllt ist.
  • Zeile 10: Prüft, ob der Benutzername gültig ist oder nicht.
  • Zeile 12: Wenn der Benutzername ungültig ist, wird eine Nachricht angezeigt und die Skriptausführung wird gestoppt.
  • Zeile 17: Generiert ein zufälliges Passwort, das 14 Zeichen lang ist und fünf nicht alphanumerische Zeichen enthält.
  • Zeile 18: Konvertiert das Klartextpasswort in ein sicheres String-Passwortobjekt.
  • Zeile 20: Ermöglicht das Zurücksetzen des Passworts.
  • Zeile 22: Zwingt das AD-Konto dazu, das Passwort beim nächsten Anmelden zu ändern.
  • Zeile 24: Zeigt das neue Passwort im Konsolenfenster an. Wir empfehlen dies jedoch aus Sicherheits Gründen nicht. Zeile 6 wird dafür sorgen, dass das Passwort nach dem Geschmack des Benutzers geändert wird und gilt als best practice für diesen Vorgang.
  • Zeile 28: Zeigt eine Fehlermeldung an, wenn das Zurücksetzen fehlgeschlagen ist.

Beispielausführungen des AD-Passwortzurücksetzungstools

A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.

Das Zurücksetzen des Passworts eines einzelnen Benutzers

Angenommen, wir müssen das Passwort eines einzelnen Benutzers zurücksetzen. Führen Sie zunächst das Active Directory-Passwortzurücksetzungstool aus und geben Sie den Zielbenutzernamen an. Um beispielsweise das Passwort eines einzelnen Benutzers zurückzusetzen, führen Sie das Skript wie unten gezeigt aus:

.\Reset-ADPassword.ps1 -username USERNAME

Als Ergebnis setzt das Skript das Passwort zurück und zeigt es auf dem Bildschirm an. Zum Beispiel sendet diese Ausgabe das neue Passwort an den betroffenen Benutzer:

Das Zurücksetzen des Passworts mehrerer Benutzer

Glücklicherweise können wir in PowerShell eine Liste mithilfe von Arrays und der foreach-Schleife durchlaufen. Darüber hinaus ermöglicht uns der ForEach-Object-Cmdlet in PowerShell die gleichzeitige Verarbeitung mehrerer Elemente. Dieser Cmdlet ermöglicht es uns, verschiedene Elemente über die Pipeline zu übergeben.

Um die Passwörter mehrerer Benutzer zurückzusetzen, erstellen Sie ein Array mit zwei oder mehr Benutzernamen. Die Array-Elemente werden dann über die Pipeline übergeben, wo der ForEach-Object-PowerShell-Befehl das Passwortzurücksetzungstool für jeden Benutzernamen ausführt.

@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

Wir verbessern dies jedoch, wenn wir mehr als zwei Benutzerkonten beheben. Denken Sie an die zuvor erstellte Textdatei? Wir nutzen sie in diesem Abschnitt.

Wir müssen die Textdatei mit den Benutzerkonten lesen und das AD-Passwort-Reset-Tool für jedes ausführen. Verwenden Sie dazu das Get-Content-Cmdlet, um den Inhalt der Textdatei in PowerShell zu importieren. Danach sendet das Skript die Daten an die Pipeline und führt das AD-Passwort-Reset-Skript für jedes Konto aus.

Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

Nach Ausführung des obigen Ausschnitts werden wir mehrere Benutzerpasswörter in einem einzigen Durchlauf zurückgesetzt haben.

Vielen Dank für das Lesen des Artikels „Aktive Directory-Benutzer mit abgelaufenem Passwort finden (PowerShell)“. Wir werden ihn nun abschließen.

Suchen Sie nach AD-Benutzern mit abgelaufenen Kennwörtern PowerShell Fazit

Zusammenfassend ist das Auffinden von Active Directory Benutzern mit abgelaufenen Passwörtern mithilfe von PowerShell ein unkomplizierter Vorgang, der Zeit und Mühe spart. Durch Verwendung des Get-ADUser-Cmdlets und Filterung nach Benutzern mit abgelaufenen Passwörtern können Sie schnell bestimmte Benutzer für das Zurücksetzen des Passworts oder für Ablaufbenachrichtigungen identifizieren und auswählen. Dieser Befehl ist für Organisationen mit einer großen Anzahl von Benutzern nützlich, da er es Ihnen ermöglicht, den Ablauf von Passwörtern proaktiv zu verwalten und das Risiko von Sicherheits-Verletzungen zu verringern.

Schauen Sie sich auch unseren Active Directory-Bereich auf unserem Blog hier sowie den PowerShell-Bereich hier an, um mehr Inhalte zu lesen.

Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/