¿Hay alguna forma desde la consola de administración de la computadora o la línea de comando para determinar cuándo caducará la contraseña de un usuario?
Nota: estoy haciendo estas preguntas para un servidor que no es parte de un dominio.
¿Hay alguna forma desde la consola de administración de la computadora o la línea de comando para determinar cuándo caducará la contraseña de un usuario?
Nota: estoy haciendo estas preguntas para un servidor que no es parte de un dominio.
Respuestas:
Esto se puede lograr con el comando DOS / Batch
nombre de usuario de usuario neto
Si estuviera en un dominio, necesitaría agregar el interruptor /Domain
. En su caso, simplemente inserte el nombre de usuario.
Esto enumerará los detalles más importantes de esa cuenta, incluida la fecha de vencimiento de la contraseña del usuario.
Si está persiguiendo el mismo problema que tuve en el pasado, los usuarios desean una mejor advertencia de cuándo caducará su contraseña, especialmente cuando están lejos de una PC típica. El siguiente es el script que ejecuto cada 72 horas (3 días) para enviar avisos por correo electrónico.
# © 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 = "admin@example.com"
$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)
}
Establezca esas cuatro líneas de configuración de manera adecuada para su entorno. Modifique otras partes según sea necesario.
PS puede quejarse si el script no está firmado. Firmé el mío usando (tengo un certificado de firma de código):
Set-AuthenticodeSignature PasswordBot.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Luego creé una tarea programada simple, se dispara cada 72 horas, la acción es ejecutar C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
con argumento C:\Path\To\PasswordBot.ps1
.
Nota: La computadora en la que se ejecuta este script debe ser miembro del dominio y debe tener instalado el "Módulo Active Director para Windows PowerShell". Puede ejecutarlo start /wait ocsetup ActiveDirectory-PowerShell
en cualquier servidor para instalarlo, o encontrarlo en la lista de Características en Windows 7 (es posible que se requiera RSAT, no lo recuerdo ahora).