Jak ustawić hasło użytkownika a następnie wymóc jego zmianę podczas następnego logowania?
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 ustawić hasło użytkownika a następnie wymóc jego zmianę podczas następnego logowania?
Cześć, Skrypciarze! W naszej szkole chciałbym pozwolić nauczycielom na zmianę haseł uczniów na ich nazwę logowania, a następnie zmusić uczniów do zmiany haseł podczas następnego logowania. Jak to zrobić?
-- DS
Hej, DS. Chłopie, chyba zapytałeś niewłaściwą osobę. W końcu, piszący tę rubrykę Skrypciarz był nauczycielem; gdyby wiedział, jak zmusić do czegoś uczniów, to pewno dalej by nim był!
W gruncie rzeczy, piszący tę rubrykę Skrypciarz zawsze miał dobre układy z uczniami; właściwie to zawsze radził sobie dobrze z dziećmi, kropka. Jak zaświadczą koledzy Skrypciarza, miewa on problemy tylko z dorosłymi. Być może powodem jest, jak to ujął kilka tygodni temu Skryptujący Syn: "wszędzie gdzie się znajdziesz, zazwyczaj jesteś najbardziej niedojrzałą osobą." I nie, nie mamy pojęcia, co mogło sprowokować ten wybuch gniewu.
No dobrze, może mamy jakieś pojęcie...
Ale nie ważne, czy macie do czynienia z dorosłym, dzieckiem, czy nawet Skrypciarzem, poniższy skrypt ustawi hasło użytkownika na jego nazwę logowania, a następnie będzie wymagać od użytkownika zmiany hasła podczas następnego logowania:
Set objUser = GetObject("LDAP://cn=Ken Myer,ou=Finance,dc=fabrikam,dc=com")
objUser.SetPassword objUser.sAMAccountName
objUser.Put "pwdLastSet", 0
objUser.SetInfo
A tak, to bardzo krótki i zwięzły skrypt, prawda? Jeszcze jeden powód dla którego piszący tę rubrykę Skrypciarz nie jest już nauczycielem: nauczyciele muszą ciężko pracować. A Skrypciarze, no cóż....
Jak widzicie, zaczęliśmy od stworzenia powiązania z kontem użytkownika w katalogu Active Directory - to właśnie robi ten wiersz kodu:
Set objUser = GetObject("LDAP://cn=Ken Myer,ou=Finance,dc=fabrikam,dc=com")
Następnie wywołujemy metodę SetPassword, żeby zmienić hasło użytkownika. Metoda SetPassword wymaga podania jednego parametru: nowego hasła użytkownika. Ponieważ chcemy, aby nowe hasło brzmiało tak samo jak nazwa logowania użytkownika, przekazujemy wartość atrybutu sAMAccountName:
objUser.SetPassword objUser.sAMAccountName
Wierzcie lub nie, ale to wystarczy, żeby zmienić hasło użytkownika.
Wymuszenie na użytkowniku zmiany hasła podczas kolejnego logowania jest dwa razy trudniejsze - wymaga aż dwóch wierszy kodu:
objUser.Put "pwdLastSet", 0
objUser.SetInfo
W pierwszym wierszu przypisujemy wartość 0 atrybutowi pwdLastSet. Atrybut ten śledzi, kiedy ostatnio użytkownik zmieniał hasło. Jeśli jego wartość wynosi 0, użytkownik musi zmienić hasło podczas kolejnego logowania.
W drugim wierszu wywołujemy metodę SetInfo, żeby zapisać zaktualizowany atrybut w katalogu Active Directory.
To powinno wystarczyć, DS, zakładając oczywiście, że nauczyciele mają uprawnienia do zmiany haseł użytkowników i aktualizacji atrybutu pwdLastSet.
Jak już mówimy o nauczycielach: piszący tę rubrykę Skrypciarz lubił uczyć; to jedna z przyczyn dla których tak wiele czasu spędza prowadząc szkolenia. Czego nie lubił, to szkolnej administracji: przerośniętej, zdehumanizowanej biurokracji, nigdy nie wiedzącej co robi i dlaczego. I tak trafił do Microsoftu.
Tak, wiem, co myślicie. Ale jeśli ktoś zapyta, to wy to powiedzieliście, nie my.
Do początku strony |