Im heutigen Artikel zeige ich euch ein Script, mit dem ihr alle User aus dem AD auslesen könnt, des Passwort bereits abgelaufen ist oder in den nächsten tage abläuft.
Dies kann in mehren Situationen hilfreich sein. In meinem Anwendungsfall wollte ein Kunde deren Tablet-User 10 Tage vor Ablauf des Passwortes per Mail benachrichtigen, damit diese genug Zeit haben Uhr Passwort zu ändern.
Das ganze wurde mittels Orchestrator umgesetzt, ich zeige euch hier aber das PowerShell welches mir die Informationen ausliest.
Das Script
Zu Beginn natürlich wieder das Active Directory Modul importieren.
#Import Active Directory Module
Import-Module ActiveDirectory
Danach setzen wir eine Variable “$Days” mit der wir die Tag vor Passwortablauf definieren können, also die Zeitspanne bis zum Ablauf
#Day of Span
$Days=”33″
Mit dieser Variable setzen wir nun die Variable “$Date” mit dem richtigen Format und addieren die Anzahl der Tage von “$Days”
Mehr Infos zur Datumsformatierung in PowerShell findet ihr hier: https://www.techguy.at/2013/12/09/powershell-get-date/
$Date=Get-Date -Format yy-MM-dd((Get-Date).adddays($Days))
Anschließend holen wir uns alle User aus dem AD, wobei wir hier schon filtern, den wir benötigen nur User die aktiviert sind und dessen Passwort überhaupt abläuft, alle anderen interessieren uns nicht.
$Users=Get-ADUser -filter {(Enabled -eq $True) -and (PasswordNeverExpires -eq $False)}
Danach definieren wir die Properties, welche wir benötigen, also den Displaynamen, das Ablaufdatum des Passwortes und die Mail Adresse und filtern das wir nur User zurückbekommen die auch einen Displaynamen haben.
-Properties DisplayName, msDS-UserPasswordExpiryTimeComputed, Mail | Where-Object {$_.DisplayName -ne $null}
Zum Schluss formatieren wir noch das Passwortdatum im richtigen Format, damit wir es mit der Variable “$Date” von vorhin vergleichen können
| Select Mail, DisplayName,@{Name=”ExpiryDate”;Expression={([datetime]::fromfiletime($_.”msDS-UserPasswordExpiryTimeComputed”)).DateTime}}
Danach folgt die Magie, die Variable “$User” Enthält nu alle User wie oben beschrieben, hier arbeiten wir uns mit deiner Foreach Schleife durch jeden Benutzer durch und kontrollieren ob des Passwort abgelaufen ist.
#Magic
foreach ($Entry in $Users) {
$EntryDate = Get-date($Entry.ExpiryDate) -Format yy-MM-dd
if ($EntryDate -lt $Date) {
Write-Host “Alarm: The User” $entry.DisplayName “with Mailaddress:” $Entry.Mail “will expire at” $EntryDate -ForegroundColor Red
}
else
{
Write-host “OK: The User” $entry.DisplayName “with Mailaddress:” $Entry.Mail “will expire at” $EntryDate -ForegroundColor green
}
}
Das Script gibt nun in alle User deren Passwort abläuft in rot und alle User deren Passwort noch lange genug gültig ist in grün zurück. Natürlich können wir auch den Filter so definieren das wir nur User bekommen deren Passwort abläuft,das könnt ihr dann ganz einfach selbst ändern.
Hier findet ihr den Download in der TechNet Gallery: http://gallery.technet.microsoft.com/Get-Password-Expire-Date-275cb080
Bitte auch dort bewerten, Danke
Michael Seidl aka Techguy
Pingback: TOP 10 Beiträge, im ersten Halbjahr 2014 » TechGuy