Skąd mam wiedzieć, kiedy hasło danego użytkownika wygaśnie?


Odpowiedzi:


22

Można to osiągnąć za pomocą polecenia DOS / Batch

nazwa użytkownika netto

Jeśli byłeś w domenie, musisz dodać przełącznik /Domain. W twoim przypadku wystarczy wpisać nazwę użytkownika.

Spowoduje to wyświetlenie najważniejszych szczegółów tego konta, w tym daty ważności hasła użytkownika.


Podobnie jak dodatkowe informacje: Możesz także ustawić datę ważności za pomocą tego polecenia, jeśli musisz to zrobić. Zobacz „użytkownik sieci / pomoc”, aby uzyskać wszystkie informacje
LumenAlbum

1
I szybki i brudny hack do wycinania i wklejania, wystarczy użyć: użytkownik netto% nazwa użytkownika%
Codek

1
Zrobiłem netto użytkownika / domeny <nazwa użytkownika> i powiedział: „Nie można znaleźć nazwy użytkownika”. Czy to z powodu pewnych ograniczeń lub zasad bezpieczeństwa domeny?
atom88

7

Jeśli ścigasz ten sam problem, który miałem w przeszłości, użytkownicy chcą lepiej ostrzegać o wygaśnięciu hasła, szczególnie gdy nie ma ich w pobliżu typowego komputera. Poniżej znajduje się skrypt uruchamiany co 72 godziny (3 dni) na ostrzeżenia e-mailowe.

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

Ustaw te cztery wiersze konfiguracji odpowiednio do swojego środowiska. W razie potrzeby zmodyfikuj inne części.

PS może narzekać, jeśli skrypt nie jest podpisany. Podpisałem mój przy użyciu (mam certyfikat podpisywania kodu):

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

Potem stworzyłem proste Zaplanowane Zadanie, uruchamiane co 72 godziny, akcja ma być uruchamiana C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exez argumentem C:\Path\To\PasswordBot.ps1.

Uwaga: komputer, na którym uruchamiany jest ten skrypt, musi należeć do domeny i musi mieć zainstalowany moduł „Active Director for Windows PowerShell”. Możesz go uruchomić start /wait ocsetup ActiveDirectory-PowerShellna dowolnym serwerze, aby go zainstalować lub znaleźć go na liście funkcji w systemie Windows 7 (może być wymagany RSAT, nie pamiętam teraz).


To wydaje się być niesamowitym skryptem, ale jak zauważyłeś, należy go uruchomić na elemencie domeny. Jednak jego założeniem jest to, że serwer nie jest częścią domeny. Wciąż świetny scenariusz
LumenAlbum

Czy można zmodyfikować ten skrypt, aby działał na serwerze, który nie jest częścią domeny?
Aheho,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.