Ablaufdatum von AD-Passwörtern in PowerShell auslesen

    Kennwort ändern in RemotedesktopMit Hilfe des Modules ActiveDirectory ist PowerShell in der Lage, die meisten Informa­tionen von AD-Objekten auszulesen oder zu än­dern. Dazu gehören auch die verschie­denen Ein­stellungen für Passwörter von Benutzer­konten, etwa deren Ablauf­datum oder der Zeitpunkt ihrer letzten Änderung.

    Als besonders nützlich erweist sich PowerShell für das AD-Reporting, weil die grafischen Management-Tools dafür nur unzureichend geeignet sind. Nach der Installation des Moduls ActiveDirectory kann man viele kritische Konfigurationen oft mit Hilfe einzelner Befehle entdecken.

    Informationen zu Kennwörtern

    Zu den wesentlichen Funktionen des AD gehört zweifellos das Management von Passwörtern. In diesem Zusammenhang kann PowerShell beispielsweise die herrschenden Regeln anzeigen und ändern oder herausfinden, welche Benutzer sich ohne Kennwort anmelden dürfen.

    Eine aufschlussreiche Information für die Verwaltung von Benutzerkonten ist auch das Ablaufdatum für Passwörter und wann User diese zuletzt geändert haben. Beide lassen sich relativ einfach über die entsprechenden Attribute ermitteln.

    User-Objekte einlesen

    Benötigt man die User-Liste für mehrere Operationen, dann sollte man sie zuerst in einer Variable speichern:

    $Users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword

    Dieser Aufruf ermittelt alle User-Objekte, deren Konto nicht deaktiviert ist und deren Passwörter ein Ablaufdatum haben. Über den Parameter Properties lädt er die nachher erforderlichen Attribute für Ablaufdatum, das Datum des letzten Kennwortwechsels und das Recht, das Passwort ändern zu dürfen.

    Möchte man die Abfrage in großen Verzeichnissen auf bestimmte Domänen oder OUs eingrenzen, dann kann man dies über den Parameter SearchBase tun (siehe dazu Get-ADUser, Set-ADUser: Benutzer anlegen, abfragen und ändern mit PowerShell).

    Ablaufdatum der Passwörter anzeigen

    Möchte man nur eine Übersicht über Ablaufdatum und Zeitpunkt des letzten Kennwortwechsels generieren, dann man dies folgendermaßen tun:

    $Users | select Name, @{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet

    Das Attribut msDS-UserPasswordExpiryTimeComputed enthält das Ablaufdatum nicht in einem lesbaren Format, so dass der obige Befehl eine Calculated Property nutzt, um es mit Hilfe der Funktion FromFileTime umzurechnen.

    Liste aller User mit Ablaufdatum für Passwörter und Datum des letztes Kennwortwechsels.

    Inaktive Konten aufspüren

    Eine weitere interessante Abfrage könnte darin bestehen, ob bestimmte Benutzer ihr Kennwort schon längere Zeit nicht mehr geändert haben. Dies könnte neben dem letzten Anmeldedatum ein weiterer Hinweis auf inaktive Konten sein:

    foreach($u in $Users)
    {if($u.PasswordLastSet.addDays(100) -lt (Get-Date)){$u.name}}

    Dieser Befehl filtert alle User aus, die ihr Kennwort seit mehr als 100 Tagen nicht mehr erneuert haben. Aufschlussreicher dürfte es allerdings sein, wenn man die seitdem verstrichene Zeit ins Verhältnis zur Gültigkeits­dauer von Passwörtern setzt. Diese lässt sich über Get-ADDefaultDomainPasswordPolicy ermitteln:

    $maxPWAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days

    Anschließend kann man diesen Wert zum Ablaufdatum hinzuzählen und schauen, ob das Ergebnis in der Vergangenheit liegt:

    Die im Ergebnis aufgelisteten Benutzer haben somit seit dem Ablauf des Kennworts dieses nicht mehr geändert. Liegt das errechnete Datum weit zurück, dann handelt es sich höchstwahrscheinlich um einen inaktiven Account.

    Benutzer, die ihr Passwort nicht ändern können

    Allerdings kann dabei auch der Fall vorliegen, dass bestimmte User ihr Passwort gar nicht ändern dürfen. Folgender Befehl findet heraus, ob bei solchen Benutzern das Kennwort abgelaufen ist und daher eine Aktion des Administrators erforderlich sein könnte:

    Dieser Aufruf prüft ebenfalls, ob das Ablaufdatum des Kennworts in der Vergangenheit liegt, indem es mit dem aktuellen Datum aus Get-Date vergleichen wird.

    Keine Kommentare