web-dev-qa-db-fra.com

Comment savoir quand le mot de passe d'un utilisateur expirera?

Existe-t-il un moyen à partir de la console de gestion de l'ordinateur ou de la ligne de commande pour déterminer quand le mot de passe d'un utilisateur expirera?

Remarque: je pose ces questions pour un serveur qui ne fait pas partie d'un domaine.

16
Aheho

Ceci peut être réalisé par la commande DOS/Batch

Nom d'utilisateur Net User

Si vous étiez sur un domaine, vous devez ajouter le commutateur /Domain. Dans votre cas, insérez simplement le nom d'utilisateur.

Cela répertorie les détails les plus importants de ce compte, y compris la date d'expiration du mot de passe de l'utilisateur.

22
LumenAlbum

Si vous poursuivez le même problème que j'ai eu par le passé, les utilisateurs veulent un meilleur avertissement de la date d'expiration de leur mot de passe, en particulier lorsqu'ils sont loin d'un PC classique. Voici le script que j'exécute toutes les 72 heures (3 jours) pour envoyer des avertissements par 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)
}

Définissez ces quatre lignes de configuration en fonction de votre environnement. Modifiez d'autres pièces si nécessaire.

PS peut se plaindre si le script n'est pas signé. J'ai signé le mien en utilisant (j'ai un certificat de signature de code):

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

J'ai ensuite créé une tâche planifiée simple, se déclenche toutes les 72 heures, l'action consiste à exécuter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe avec l'argument C:\Path\To\PasswordBot.ps1.

Remarque: l'ordinateur sur lequel ce script est exécuté doit être membre du domaine et le "module Active Director pour Windows PowerShell" doit être installé. Tu peux courir start /wait ocsetup ActiveDirectory-PowerShell sur n'importe quel serveur pour l'installer ou le trouver dans la liste des fonctionnalités de Windows 7 (RSAT peut être requis, je ne m'en souviens plus maintenant).

7
Chris S