AD-Passwörter – Ablaufdatum abrufen per PowerShell // Inaktive Konten anzeigen // Benutzer, die ihr Passwort nicht ändern können anzeigen

 

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. Aufschluss­reicher 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 letzten Änderungsdatum 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.

Lasse gerne ein Kommentar da, vielleicht hilft es auch anderen Usern?

WiKi.Premium-Lizenz.com
Logo
Jetzt registrieren