如何判断给定用户的密码何时到期?

Ahe*_*eho 16 security windows-server-2008

是否可以通过计算机管理控制台或命令行来确定用户密码何时到期?

注意:我是针对不属于域的服务器问这个问题的。

Lum*_*bum 22

这可以通过 DOS/Batch 命令来实现

网络用户名

如果您在域中,则需要添加 switch /Domain。在您的情况下,只需插入用户名。

这将列出该帐户最重要的详细信息,包括用户密码的到期日期。

  • 我做了 net user /domain <username> ,它说“找不到用户名”。这是因为某些域安全限制或策略吗? (2认同)

Chr*_*s S 7

如果您正在解决我过去遇到的同样问题,用户希望在他们的密码即将到期时得到更好的警告,尤其是当他们远离典型的 PC 时。以下是我每 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 = "admin@example.com"
$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)
}
Run Code Online (Sandbox Code Playgroud)

为您的环境适当地设置这四个配置行。根据需要修改其他部分。

如果脚本没有签名,PS 可能会抱怨。我使用(我有一个代码签名证书)签署了我的:

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

然后我创建了一个简单的计划任务,每 72 小时触发一次,动作是C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe使用参数运行C:\Path\To\PasswordBot.ps1

注意:运行此脚本的计算机必须是域的成员,并且必须安装了“Windows PowerShell 的 Active Director 模块”。您可以start /wait ocsetup ActiveDirectory-PowerShell在任何服务器上运行以安装它,或者在 Windows 7 的功能列表中找到它(可能需要 RSAT,我现在记不清了)。