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

16

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.

Aheho
la source
Veuillez consulter le centre d'aide .
Michael Hampton

Réponses:

22

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

nom d'utilisateur net de l'utilisateur

Si vous étiez sur un domaine, vous devrez 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.

LumenAlbum
la source
Juste comme information supplémentaire: vous pouvez également définir la date d'expiration via cette commande, si vous en avez besoin. Voir "net user / help" pour toutes les informations
LumenAlbum
1
Et un hack rapide et sale pour couper et coller, utilisez simplement: net user% username%
Codek
1
J'ai fait un utilisateur / domaine net <nom d'utilisateur> et il a dit "Le nom d'utilisateur est introuvable." Est-ce à cause d'une restriction ou d'une politique de sécurité de domaine?
atom88
7

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 à s'exécuter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeavec un 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é. Vous pouvez exécuter start /wait ocsetup ActiveDirectory-PowerShellsur 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 me souviens plus maintenant).

Chris S
la source
Cela semble être un script génial, mais comme vous le faites remarquer, il doit être exécuté sur un membre du domaine. Cependant, sa prémisse est que le serveur ne fait pas partie d'un domaine. Encore un excellent script
LumenAlbum
Ce script peut-il être modifié pour fonctionner sur un serveur qui ne fait pas partie d'un domaine?
Aheho