Passwörter der AD-Accounts mit Set-ADAccountPassword setzen

powershell placeholder

Der Tag wird kommen an dem man plötzlich die Passwörter von hunderten AD-Accounts setzen muss. Dank der stets voranschreitenden Entwicklung von Powershell, kann man dies auch ohne Überstunden machen.

Ein paar typische Befehle mit Set-ADAccountPassword and Get-Aduser habe ich hier zusammengestellt.

Passwort eines AD-Accounts mit Set-ADAccountPassword ändern

$Passwort = ConvertTo-SecureString -AsPlainText 'New password' -Force
Set-ADAccountPassword dampf.hans -Reset -NewPassword $Passwort

Passwörter von ähnlichen AD-Accounts resetten

$Passwort = ConvertTo-SecureString -AsPlainText 'New password' -Force
Get-ADuser -Filter 'Name -like "service.phone*"' | Set-ADAccountPassword -Reset -NewPassword $Passwort

Mit Get-Aduser filtern wir die Nutzer raus deren Passwort wir mit Set-ADAccountPassword setzen wollen.

Passwort setzen und AD-Account aktivieren

Passwortänderung überprüfen

Wenn man massenhaft Passwörter der AD-Accounts ändert, sollte man auch prüfen ob die tatsächlich geändert wurden. Dafür müssen wir uns nur die Attribute whenChanged, pwdLastSet, PasswordLastSet

Get-ADuser -Filter 'Name -like "service.phone*"' -Properties GivenName,whenChanged,pwdLastSet,PasswordLastSet
Get-Aduser PAsswortchange verifizieren

Set-ADAccountPassword Troubleshooting

Set-ADAccountPassword – Permission Denied

Dieser Fehler ist fast ein Klassiker und kann „der Teufel steckt im Detail“ zugeordnet werden 😉

Als erstes solltet ihr sicherstellen, dass ihr überhaupt genügend Berechtigungen im AD habt! Dazu AD-User and Computers aufrufen und das Passwort einmal manuell setzen. Wenn das klappt, habt ihr zumindest die korrekte Berechtigung. Ein weiterer Grund kann sein, dass die Powershell Console oder Powershell ISE nicht mit „run as Administrator“ gestartet ist.

  • Berechtigung eures Nutzers im AD prüfen
  • Powershell Console / ISE mit „run as Administrator“ starten
Set-ADAccountPassword : Access is denied
At line:X char:x
+ Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -As …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (service.phone01:ADAccount) [Set-ADAccountPassword], UnauthorizedAccessException
+ FullyQualifiedErrorId : Access is denied,Microsoft.ActiveDirectory.Management.Commands.SetADAccountPassword

falscher Code

$Passwort="S1cher1stS1cher!"
Get-ADuser -Filter 'Name -like "service.phone*"' | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $Passwort -Force)

Warum (ConvertTo-SecureString -AsPlainText $Passwort -Force) manchmal nicht innerhalb vom Aufruf von Set-ADAccountPassword arbeitet, habe ich nicht rausbekommen.

richtiger Code

$Passwort = ConvertTo-SecureString -AsPlainText 'S1cher1stS1cher!' -Force
Get-ADuser -Filter 'Name -like "service.phone*"' | Set-ADAccountPassword -Reset -NewPassword $Passwort

„ConvertTo-SecureString -AsPlainText“ sollte schon in der Passwort-Variable aufgerufen werden

weitere Beiträge über Powershell