Hallo Freunde der Sonne,
eine interessante Anfrage hat mich neulich erreicht: wie kann ich alle Benutzer in meinem AD sehen, die bei der nächsten Anmeldung ihr Kennwort ändern müssten? Kann ich diesen Wert dann auch ändern?
Hier meine Version für die PowerShell, das extreme Query am Ende ist aber teilweise geklaut…und nicht getestet.
Benutzer Kennwort-Attribut suchen/ändern (PowerShell)
Welche Abfragen werden hier behandelt, bzw. wie ist der Ablauf?
- Richtigen Datenbestand in Variable laden (diesmal muss ein weiteres Feld in den Index eingefügt werden)
- Gefilterte Anzeige des Index
- Aktion über diesen gefilterten Index durchführen
- Mehrere Aktionen über diesen gefilterten Index ausführen
Welchen Kontext muss ich nach dem öffnen der PowerShell laden?
Das ActiveDirectory-Modul muss nachgeladen werden, da wir die AD-Benutzerkonten verwalten wollen, dies geht wie folgt:
Import-Module ActiveDirectory
Wie lade ich einen Index in eine Variable mit weiteren Attributen eines AD-Kontos?
Wenn man es erstmal kapiert hat wozu diese Funktion Properties (Attribut) in der Standard-Abfrage auftaucht – ganz einfach (natürlich wieder ein Einzeiler):
$vari1 = get-aduser -properties PasswordExpired -Filter * -SearchBase „OU=Technik,OU=GF,OU=Firma,DC=Domain,DC=local“
In diesem Beispiel wird meine Lieblingsvariable „vari1“ mit einem Index von AD-Benutzern gefüllt, wobei durch die Option „Properties“ weitere Attribute des AD-Benutzers zur Abfrage hinzugefügt werden. Diese sind normaler Weise um schnelle Abfragen zu ermöglichen ausgeschlossen. Klingt komisch, aber die AD-Benutzer speichern doch relative viele Werte…
Übrigens im dunkelrot markierten Bereich kann die Organisationseinheit zum Suchen festgelegt werden!
Aber wie zeige ich mir nun die Konten an, die ein neues Passwort nach der Anmeldung eingeben müssen?
Wie in einer schlechten Kochshow: ich hab da mal was vorbereitet…dank dem angepassten Index filtern wir nach dem entsprechenden Feld und lassen uns die Benutzernamen ausgeben:
$vari1 | foreach {if($_.PasswordExpired -eq $true) {echo $_.Name}}
Ich wollte nur dieses Häkchen deaktivieren – wie geht das?
In der Schleife hinterlegt man nun den Set-Befehl und die Konten werden umgeschrieben…aber ggf. erstmal weiterlesen und dann die entsprechende Handlung auswählen!
$vari1 | foreach {if($_.PasswordExpired -eq $true) {set-aduser $_.samaccountname -ChangePasswordAtLogon $false}}
Was mache ich wenn ich dabei auch das Benutzer-Kennwort setzen möchte?
Dann wird eine weitere Order hinterlegt, dank einer geklauten Funktion kann das Kennwort auch im Query hinterlegt werden und muss nicht für alle Konten einzeln hinterlegt werden:
$vari1 | foreach {if($_.PasswordExpired -eq $true) {Set-ADAccountPassword $_.samaccountname -NewPassword (ConvertTo-SecureString -AsPlainText „password“ -Force); set-aduser $_.samaccountname -ChangePasswordAtLogon $false}}
Ggf. kann diese Query noch verfeinert werden, in dem das Argument „-reset“ dem Befehl „Set-ADAccountPassword“ hinzugefügt wird.
So das war es auch schon wieder – schreibt man wenn Ihr euer AD zerlegt habt! ;P