Как узнать, когда истекает срок действия пароля конкретного пользователя?

Как узнать, когда истекает срок действия пароля конкретного пользователя?

Есть ли способ из консоли управления компьютером или из командной строки определить, когда истекает срок действия пароля пользователя?

Примечание: я задаю этот вопрос для сервера, который не является частью домена.

решение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, сейчас не помню).

Связанный контент