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.
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.
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).