Como posso saber quando a senha de um determinado usuário expirará?

16

Existe uma maneira do console de gerenciamento do computador ou da linha de comando para determinar quando a senha de um usuário expirará?

Nota: Estou fazendo essas perguntas para um servidor que não faz parte de um domínio.

Aheho
fonte
Por favor, consulte o centro de ajuda .
Michael Hampton

Respostas:

22

Isso pode ser alcançado pelo comando DOS / Batch

nome de usuário do usuário líquido

Se você estivesse em um domínio, seria necessário adicionar a opção /Domain. No seu caso, basta inserir o nome de usuário.

Isso listará os detalhes mais importantes dessa conta, incluindo a data de validade da senha do usuário.

LumenAlbum
fonte
Apenas como informações adicionais: Você também pode definir a data de validade por este comando, caso precise fazer isso. Veja "net user / help" para todas as informações
LumenAlbum 28/08
11
E um corte rápido e sujo para o corte e colagem, basta usar: net user% username%
Codek
11
Eu criei net user / domain <username> e ele dizia "O nome de usuário não foi encontrado." Isso ocorre devido a alguma restrição ou política de segurança de domínio?
precisa saber é o seguinte
7

Se você está perseguindo o mesmo problema que eu tive no passado, os usuários desejam um aviso melhor sobre quando sua senha expirará, especialmente quando estiverem longe de um PC comum. A seguir, o script que eu executo a cada 72 horas (3 dias) para enviar avisos por email.

# © 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 peças conforme necessário.

O PS pode reclamar se o script não for assinado. Assinei o meu usando (tenho um certificado de assinatura de código):

Set-AuthenticodeSignature PasswordBot.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

Então eu criei uma tarefa agendada simples, dispara a cada 72 horas, a ação é executada C:\Windows\System32\WindowsPowerShell\v1.0\powershell.execom argumento C:\Path\To\PasswordBot.ps1.

Nota: O computador em que este script é executado deve ser um membro do domínio e deve ter o "módulo Active Director para Windows PowerShell" instalado. Você pode executar start /wait ocsetup ActiveDirectory-PowerShellem qualquer servidor para instalá-lo ou encontrá-lo na lista Recursos no Windows 7 (o RSAT pode ser necessário, não me lembro agora).

Chris S
fonte
Este parece ser um script incrível, mas, como você aponta, ele precisa ser executado em um membro do domínio. No entanto, sua premissa é que o servidor não faz parte de um domínio. Ainda ótimo script
LumenAlbum
Esse script pode ser alterado para funcionar em um servidor que não faz parte de um domínio?
Aheho