In onze Active Directory hadden we nog een paar gebruikers waarbij het account zo ingesteld was dat het wachtwoord nooit zou vervallen. Da's uiteraard niet de bedoeling, en dat moet uiteraard omgezet worden. Als je het omzet, zal de gebruiker direct het wachtwoord moeten wijzigen. Dat kan soms lastig zijn, omdat ze bijvoorbeeld niet op kantoor zijn, of op vakantie. Daarom zocht ik naar een manier om wel het wachtwoord te laten vervallen, maar dan niet meteen. Dat kan, door middel van pwdlastset. Het onderstaande powershell script doet precies dat:

foreach ($GroupMember in Get-ADGroupMember "groupname") {
  $user=get-aduser -Identity $GroupMember.SamAccountName -Properties * | ? passwordneverexpires -eq $True
  if ($User) {
    Write-host "Change user" $User.SamAccountName  
    Set-ADUser -Identity $User.samaccountname -Replace @{pwdlastset="0"}
    Set-ADUser -Identity $User.samaccountname -Replace @{pwdlastset="-1"}
    set-ADUser -Identity $User.SamAccountName -PasswordNeverExpires $False

    }
  }

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Eerst worden alle gebruikers van een bepaalde groep opgehaald, en wordt bekeken of PasswordNeverExpires inderdaad waar is. Als dat het geval is wordt pwdlastset eerst op 0 gezet, wat inhoudt dat het wachtwoord nog nooit is ingesteld. Direct daarna wordt dezelfde waarde op -1 gezet. Daarmee wordt aangegeven dat de laatste datum dat het wachtwoord is gewijzigd vandaag is. Als laatste zetten we PasswordNeverExpires op $False, zodat ze het wachtwoord moeten vervangen na verloop van tijd.

In de laatste regel worden nog even alle actieve gebruikers waarbij het wachtwoord vervalt getoond, met de datum waarop het wachtwoord zal vervallen.