Ostatnio przyszło mi postawić stronę internetową, która udostępnia interfejs do tego, aby dodać użytkownika do Active Directory, wrzucić do odpowiedniego (wcześniej ustalonego) kontenera OU, włączyć konto i uniemożliwić zmianę hasła użytkownikowi.

Skrypt, jaki to umożliwia (bazujący na cmdletach Quest):

Add-PSSnapin Quest.ActiveRoles.ADManagement

New-QADUser -name NAZWAUSERA -ParentContainer ‚CN=Users,DC=moja,DC=domena,DC=pl’ -samAccountName NAZWAUSERA -UserPrincipalName NAZWAUSERA -UserPassword ‚HASŁOUSERA’ | Enable-QADUser | Set-QADUser -PasswordNeverExpires $true -UserMustChangePassword $false | Add-QADPermission -Account SELF,Everyone -ExtendedRight "User-Change-Password" -Deny -ApplyTo ThisObjectOnly

Takie wpisy tworzą użytkownika NAZWAUSERA z hasłem HASŁOUSERA, włączają to konto oraz wyłączają możliwość zmiany hasła, ustawiając hasło na trwałe (niewygasające).

Do zmiany hasła użytkownik dostaje inny interfejs, gdzie wpisuje tylko swój login i nowe hasło. Skrypt “z tyłu”:

Add-PSSnapin Quest.ActiveRoles.ADManagement

Get-QADUser -sAMAccountName ‚NAZWAUSERA‚ | Set-QADUser -userPassword ‚HASŁOUSERA

W moim przypadku inny mechanizm chroni dostęp do tej witryny (wcześniej) – dla użytkownika pojawia się tylko miejsce na wpisanie nowego hasła.

 

Co, jeśli potrzeba zresetować hasła wszystkim w ramach danego OU? Zresetować – ustawić to samo dla wszystkich i wymusić zmianę przy najbliższym logowaniu albo tylko wymusić zmianę przy najbliższej okazji?

Wykorzystując cmdlety Quest:

Add-PSSnapin Quest.ActiveRoles.ADManagement

$OU = "DOMENA.COM/OUZmianyHasla"

get-QADUser -SearchRoot $OU | set-QADUser -userpassword "tYmcz4sow3Has!0"

ForEach-Object { get-QADUser -searchroot $OU | Set-QADUser -UserMustChangePassword $true}

Powyższe linie w PowerShell: aktywują cmdlety Quest, ustawiają zmienną OU, wszystkim użytkownikom z OU zmieniają hasło a następnie wymuszają zmianę hasła przy najbliższym logowaniu.

Jeśli z jakichś powodów musimy wymusić tylko zmianę haseł, z powyższego usuwamy linię trzecią.

 

Bez wykorzystania cmdletów Quest, za to w CMD a nie w powershell:

dsquery user OU=OUZmianyHasla,DC=DOMENA,DC=COM | dsmod user -pwd tYmcz4sow3Has!0 -mustchpwd yes

 

Na podstawie:

http://wss.pl/frmThread.aspx?tid=111070&pid=616149#616149

http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/c936873b-48ee-46d5-8c0d-8e73bbc5a01f

+ Własna walka (zakładanie i zmiana hasła pojedynczej osoby)