Centrum Skryptów - Active Directory

Jak sprawdzić, kiedy dany użytkownik po raz ostatni zmieniał hasło?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak sprawdzić, kiedy dany użytkownik po raz ostatni zmieniał hasło?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak sprawdzić, kiedy dany użytkownik po raz ostatni zmieniał hasło?

-- MG

Cześć Skrypciarze! Odpowiedź

Cześć, MG. Dawno temu jeden ze Skrypciarzy pracował w lokalnej szkole wyższej. Na jego wydziale nie było trudno sprawdzić, kiedy ktoś zmienił hasło – pomocnik administratorki miał listę wszystkich użytkowników i używanych przez nich haseł z dokładnymi datami zmiany. Co najlepsze, listę tę trzymał na biurku, żeby każdy mógł sprawdzić swoje hasło, gdyby go zapomniał.

Albo hasło kogoś innego.

To pierwszy sposób sprawdzania, kiedy ktoś zmienił hasło. Ale nie jedyny:

Set objUser = GetObject("LDAP://CN=myerken,OU=management,DC=Fabrikam,DC=com")

Wscript.Echo "Password last changed: " & objUser.PasswordLastChanged

Tak, to już cały skrypt. Jeśli chcemy sprawdzić, kiedy Ken Myer po raz ostatni zmieniał konto, musimy zrobić tylko dwie rzeczy:

  • Połączyć się z jego kontem w Active Directory.
  • Wyświetlić echo wartości atrybutu PasswordLastChanged.

I to już wszystko.

Rzecz jasna, przy założeniu, że chodzi o konto użytkownika Active Directory; całkiem możliwe, MG, że chodzi Ci o konto użytkownika Windows NT 4.0 albo nawet konto użytkownika lokalnego. W takim razie możemy mieć problem. Aby połączyć się z kontem NT 4.0 lub kontem użytkownika lokalnego, potrzebny jest nam provider WinNT, a ten nie obsługuje atrybutu PasswordLastChanged.

Czy to znaczy, że nic się nie da zrobić w wypadku kont NT 4.0 i kont użytkownika lokalnego? Ależ skąd, prawdziwy Skrypciarz zawsze sobie radę da:

strComputer = "atl-ws-01"



Set objUser = GetObject("WinNT://" & strComputer & "/kenmyer")



intPasswordAge = objUser.PasswordAge

intPasswordAge = intPasswordAge * -1 

dtmChangeDate = DateAdd("s", intPasswordAge, Now)



WScript.Echo "Password last changed: " & dtmChangeDate

Jak widać, ten skrypt jest ociupinkę większy, ale i tak dosyć krótki. Zaczynamy od połączenia z kontem użytkownika Kena Myera (nazwa użytkownika: kenmyer) na komputerze atl-ws-01. (Co zrobić w celu połączenia się z domeną NT 4.0? Zastąpić wartość atl-ws-01 nazwą domeny.) Następnie pobieramy wartość atrybutu PasswordAge i zapisujemy ją w zmiennej o nazwie intPasswordAge.

Dlaczego nie wywołamy po prostu echa wartości PasswordAge? No cóż, wartość ta oznacza właściwie liczbę sekund, jakie upłynęły od ostatniej zmiany hasła. Załóżmy, że dostajemy taką odpowiedź:

50725249

Nie bardzo się to nam przyda, chyba że ktoś potrafi w pamięci odjąć 50725249 sekund od bieżącej daty i w ten sposób obliczyć, kiedy hasło zostało zmienione. Ponieważ my, Skrypciarze, nie dysponujemy takimi zdolnościami, musieliśmy się uciec do skryptu. Pobieramy wartość intPasswordAge i mnożymy ją razy -1:

intPasswordAge = intPasswordAge * -1

Dlaczego? Otóż w kolejnym wierszu kodu użyjemy funkcji DateAdd do określenia daty ostatniego ustawienia hasła. W tym celu musimy przekazać trzy parametry funkcji:

  • Interwał czasowy, z jakim mamy do czynienia. Ponieważ wartość atrybutu PasswordAge jest wyrażana w sekundach, jako pierwszego parametru używamy „s”.
  • Liczbę sekund, które należy dodać do bieżącej daty. Dlatego pomnożyliśmy wartość intPasswordAge razy -1. Nie chcemy tak naprawdę dodawać wartości intPasswordAge do bieżącej daty; trafilibyśmy w ten sposób do przyszłości. Chcemy tę wartość odjąć. Jak pamiętamy z podstawówki, odejmowanie jest odwrotnością dodawania, więc najpierw zamieniamy intPasswordAge na wartość ujemną.
  • Bieżącą datę i godzinę. W tym celu używamy funkcji Now języka VBScript.

I już; wynik naszego równania zostaje zapisany w zmiennej dtmChangeDate, a w ostatnim wierszu kodu wyświetlamy echo wartości tej zmiennej. Kiedy testowaliśmy nasz skrypt, okazało się, że ostatnia zmiana hasła była 22 listopada 2003 r. Okazało się też, że nie zmieniamy haseł zbyt często.

 Do początku strony Do początku strony

Centrum Skryptów - Active Directory