Se você está perseguindo o mesmo problema que eu tive no passado, os usuários querem um aviso melhor de quando a senha expirará, especialmente quando estiverem longe de um PC comum. A seguir, o script que executo a cada 72 horas (3 dias) para enviar avisos por e-mail.
# © 2011 Chris Stone, Beerware Licensed
# Derived from http://www.jbmurphy.com/2011/09/22/powershell © 2011 Jeffrey B. Murphy
import-module ActiveDirectory
$warningPeriod = 9
$emailAdmin = "[email protected]"
$emailFrom = "PasswordBot." + $env:COMPUTERNAME + "@example.com"
$smtp = new-object Net.Mail.SmtpClient("mail.example.com")
$maxdays=(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays
$summarybody="Name 't ExpireDate 't DaysToExpire 'n"
(Get-ADUser -filter {(Enabled -eq "True") -and (PasswordNeverExpires -eq "False")} -properties *) | Sort-Object pwdLastSet | foreach-object {
$lastset=Get-Date([System.DateTime]::FromFileTimeUtc($_.pwdLastSet))
$expires=$lastset.AddDays($maxdays).ToShortDateString()
$daystoexpire=[math]::round((New-TimeSpan -Start $(Get-Date) -End $expires).TotalDays)
$samname=$_.samaccountname
$firstname=$_.GivenName
if (($daystoexpire -le $warningPeriod) -and ($daystoexpire -gt 0)) {
$ThereAreExpiring=$true
$subject = "$firstname, your password expires in $daystoexpire day(s)"
$body = "$firstname,'n'nYour password expires in $daystoexpire day(s).'nPlease press Ctrl + Alt + Del -> Change password'n'nSincerely,'n'nPassword Robot"
$smtp.Send($emailFrom, $_.EmailAddress, $subject, $body)
$summarybody += "$samname 't $expires 't $daystoexpire 'n"
}
}
if ($ThereAreExpiring) {
$subject = "Expiring passwords"
$smtp.Send($emailFrom, $emailAdmin, $subject, $summarybody)
}
Defina essas quatro linhas de configuração adequadamente para o seu ambiente. Modifique outras partes conforme necessário.
O PS pode reclamar se o script não estiver assinado. Eu assinei o meu usando (eu tenho um certificado de assinatura de código):
Set-AuthenticodeSignature PasswordBot.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Em seguida, criei uma tarefa agendada simples, acionada a cada 72 horas. A ação é executar C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
com o argumento C:\Path\To\PasswordBot.ps1
.
Observação: o computador no qual este script é executado deve ser membro do domínio e ter o "Active Director module for Windows PowerShell" instalado. Você pode executar start /wait ocsetup ActiveDirectory-PowerShell
em qualquer servidor para instalá-lo ou encontrá-lo na lista Recursos do Windows 7 (o RSAT pode ser necessário, não me lembro agora).