特定のユーザーのパスワードの有効期限がいつ切れるかを知るにはどうすればよいですか?

特定のユーザーのパスワードの有効期限がいつ切れるかを知るにはどうすればよいですか?

コンピュータ管理コンソールまたはコマンド ラインから、ユーザーのパスワードの有効期限を確認する方法はありますか?

注: この質問は、ドメインの一部ではないサーバーに対して行っています。

答え1

これはDOS/バッチコマンドで実現できます

ネットユーザーユーザー名

ドメインにいる場合は、スイッチを追加する必要があります/Domain。この場合、ユーザー名を挿入するだけです。

これには、ユーザー パスワードの有効期限など、そのアカウントの最も重要な詳細がリストされます。

答え2

以前私が抱えていたのと同じ問題に直面しているのであれば、ユーザーは、特に一般的な 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 = "[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)
}

これらの 4 つの構成行を環境に合わせて適切に設定してください。必要に応じて他の部分を変更します。

PS スクリプトが署名されていない場合はエラーが発生する場合があります。私は次のコードを使用して署名しました (コード署名証明書を持っています):

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

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe次に、72 時間ごとにトリガーされ、アクションが引数付きで実行される単純なスケジュールされたタスクを作成しましたC:\Path\To\PasswordBot.ps1

注: このスクリプトを実行するコンピューターはドメインのメンバーである必要があり、「Windows PowerShell 用 Active Director モジュール」がインストールされている必要があります。start /wait ocsetup ActiveDirectory-PowerShell任意のサーバーで実行してインストールするか、Windows 7 の機能リストで見つけることができます (RSAT が必要だった可能性がありますが、今は思い出せません)。

関連情報