Wie kann ich feststellen, wann das Kennwort eines bestimmten Benutzers abläuft?

Wie kann ich feststellen, wann das Kennwort eines bestimmten Benutzers abläuft?

Gibt es eine Möglichkeit, über die Computerverwaltungskonsole oder die Befehlszeile festzustellen, wann das Kennwort eines Benutzers abläuft?

Hinweis: Ich stelle diese Fragen für einen Server, der nicht Teil einer Domäne ist.

Antwort1

Dies kann durch den DOS/Batch-Befehl erreicht werden

Net-User-Benutzername

Wenn Sie sich in einer Domäne befinden, müssen Sie den Schalter hinzufügen /Domain. In Ihrem Fall geben Sie einfach den Benutzernamen ein.

Hier werden die wichtigsten Details dieses Kontos aufgelistet, einschließlich des Ablaufdatums des Benutzerkennworts.

Antwort2

Wenn Sie dasselbe Problem haben wie ich in der Vergangenheit: Benutzer möchten besser gewarnt werden, wenn ihr Passwort abläuft, insbesondere wenn sie sich nicht an einem normalen PC befinden. Das folgende Skript führe ich alle 72 Stunden (3 Tage) aus, um Warnungen per E-Mail zu versenden.

# © 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)
}

Passen Sie diese vier Konfigurationszeilen entsprechend Ihrer Umgebung an. Ändern Sie bei Bedarf andere Teile.

PS: Es kann sein, dass Sie sich beschweren, wenn das Skript nicht signiert ist. Ich habe meines signiert mit (ich habe ein Codesignaturzertifikat):

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

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeDann habe ich eine einfache geplante Aufgabe erstellt, die alle 72 Stunden ausgelöst wird und deren Aktion mit dem Argument ausgeführt werden soll C:\Path\To\PasswordBot.ps1.

Hinweis: Der Computer, auf dem dieses Skript ausgeführt wird, muss Mitglied der Domäne sein und das „Active Director-Modul für Windows PowerShell“ installiert haben. Sie können es start /wait ocsetup ActiveDirectory-PowerShellauf jedem Server ausführen, um es zu installieren, oder es in der Funktionsliste in Windows 7 finden (RSAT ist möglicherweise erforderlich, ich kann mich jetzt nicht erinnern).

verwandte Informationen