Centrum skryptów - Systemy operacyjne

Jak ustawić hasło użytkownika a następnie wymóc jego zmianę podczas następnego logowania?

Udostępnij na: Facebook

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 ustawić hasło użytkownika a następnie wymóc jego zmianę podczas następnego logowania?

Cześć Skrypciarze! Pytanie

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

Cześć Skrypciarze! Odpowiedź

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 Do początku strony

Centrum skryptów - Systemy operacyjne