¿Cómo puedo saber cuándo caducará la contraseña de un usuario determinado?

¿Cómo puedo saber cuándo caducará la contraseña de un usuario determinado?

¿Existe alguna forma desde la consola de administración de la computadora o desde 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 forma parte de un dominio.

Respuesta1

Esto se puede lograr mediante el comando DOS/Batch

nombre de usuario de usuario neto

Si estuviera en un dominio, necesitaría agregar el conmutador /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.

Respuesta2

Si estás persiguiendo el mismo problema que tuve en el pasado, los usuarios quieren una mejor advertencia sobre 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 advertencias 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 = "[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)
}

Configure esas cuatro líneas de configuración de forma adecuada para su entorno. Modifique otras partes según sea necesario.

PD puede quejarse si el guión 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 activa cada 72 horas, la acción se ejecuta C:\Windows\System32\WindowsPowerShell\v1.0\powershell.execon 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-PowerShellen cualquier servidor para instalarlo o encontrarlo en la lista de Funciones en Windows 7 (es posible que se requiera RSAT, no lo recuerdo ahora).

información relacionada