Есть ли способ из консоли управления компьютером или из командной строки определить, когда истекает срок действия пароля пользователя?
Примечание: я задаю этот вопрос для сервера, который не является частью домена.
решение1
Это можно сделать с помощью команды DOS/Batch
имя пользователя net user
Если бы вы были на домене, вам нужно было бы добавить переключатель /Domain
. В вашем случае просто вставьте имя пользователя.
Здесь будут перечислены наиболее важные данные этой учетной записи, включая дату истечения срока действия пароля пользователя.
решение2
Если вы преследуете ту же проблему, что и я в прошлом, пользователи хотят лучшего предупреждения о том, когда истекает срок действия их пароля, особенно когда они находятся вдали от обычного ПК. Ниже приведен скрипт, который я запускаю каждые 72 часа (3 дня) для отправки предупреждений по электронной почте.
# © 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)
}
Установите эти четыре строки конфигурации в соответствии с вашей средой. Измените другие части по мере необходимости.
PS может жаловаться, если скрипт не подписан. Я подписал свой с помощью (у меня есть сертификат подписи кода):
Set-AuthenticodeSignature PasswordBot.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Затем я создал простую запланированную задачу, которая запускается каждые 72 часа, действие — запустить C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
с аргументом C:\Path\To\PasswordBot.ps1
.
Примечание: Компьютер, на котором выполняется этот скрипт, должен быть членом домена и иметь установленный "модуль Active Director для Windows PowerShell". Вы можете запустить его start /wait ocsetup ActiveDirectory-PowerShell
на любом сервере, чтобы установить его, или найти его в списке компонентов в Windows 7 (может потребоваться RSAT, сейчас не помню).