Centrum Skrypciarzy - Systemy Operacyjne

Jak skonfigurować datę wygaśnięcia lokalnego konta użytkownika?

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 skonfigurować datę wygaśnięcia lokalnego konta użytkownika?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak skonfigurować datę wygaśnięcia lokalnego konta użytkownika?

-- GW

Cześć Skrypciarze! Odpowiedź

Cześć, GW. Trzeba przyznać, że błyskawiczny rozwój skryptów sprawia, że sytuacja Skrypciarzy zmienia się z dnia na dzień. Nie tak dawno mówiliśmy, że oprócz standardowych rozwiązań problemów skrypciarskich w języku VBScript, będziemy w naszych artykułach zamieszczać także skrypty napisane w Windows PowerShell. Dzisiaj, po ledwie kilku dniach, okazuje się, że wcale nie będziemy tego robić. Ale spokojnie, nie ma się czym martwić – zajmie się tym June Blender, kosmicznie dobra programistka PowerShell. Takie wyjście jest dużo lepsze i to z co najmniej dwóch powodów. Otóż po pierwsze, w przeciwieństwie do Skrypciarzy, June będzie wiedziała, o czym w ogóle pisze. Po drugie, Skrypciarz piszący te słowa nie będzie miał dodatkowej pracy.

Przyznajmy jednak, że to wyjście ma też i wady. Artykuły z serii Cześć, Skrypciarze! powstają zaledwie na dzień przed publikacją, więc rozwiązania w Windows PowerShell będą dodawane nieco później – jeśli np. opublikujemy artykuł w czwartek, skrypt w PowerShell zostanie do niego dodany dopiero w piątek. Być może w przyszłości znajdziemy lepszy sposób synchronizacji, ale póki co nie możemy nic obiecać.

Od redakcji TechNet

Z przyczyn technicznych, w polskiej wersji cyklu Cześć Skrypciarze! dodatki ze skryptami w PowerShell nie będą obecnie publikowane. Czytelników zainteresowanych dodatkowym skryptem odsyłamy do strony w języku angielskim: Hey, Scripting Guy!

Szczerze mówiąc, June zaczęła już dodawać skrypty w PowerShell. Nie wierzycie? To rzućcie okiem tutaj (j.ang.). Albo tutaj (j.ang.). I jeszcze tutaj (j.ang.). No dobra, w tym ostatnim artykule nie ma nic o PowerShell, ale uważamy, że jest bardzo ciekawy.

Być może ktoś o przeciętnej osobowości na początek wybrałby problem, który łatwo rozwiązać za pomocą Windows PowerShell. Jednak Skrypciarz piszący te słowa na pewno nie jest przeciętny, więc zaczynamy od skryptu umożliwiającego ustawienie daty wygaśnięcia lokalnego konta użytkownika:

Set objUser = GetObject("WinNT://atl-ws-01/kenmyer")



objUser.AccountExpirationDate = #03/01/2008# 

objUser.SetInfo
Uwaga. W Windows Vista powyższy krok działa tylko wtedy, jeśli zostanie uruchomiony z uprawnieniami administracyjnymi. Po otwarciu wiersza poleceń należy kliknąć prawym przyciskiem myszy i wybrać opcję uruchomienia w trybie administratorskim, a następnie uruchomić skrypt z tego wiersza poleceń.

Jak widać, skrypt nie jest szczególnie długi, przynajmniej w wersji PowerShell. Najpierw łączymy się z kontem użytkownika kenmyer na komputerze atl-ws-01. Po połączeniu ustawiamy wartość atrybutu AccountExpirationDate na 1 marca 2008 r.:

objUser.AccountExpirationDate = #03/01/2008#

Co oznaczają kratki (znak „#”) otaczające datę? Nie są obowiązkowe; równie dobrze można użyć zwykłego cudzysłowu. Jednak w języku VBScript znak ten wskazuje, że oznaczona nią wartość jest datą (w formacie miesiąc-dzień-rok). Radzimy, by stosować takie rozwiązanie (chociaż nie poważymy się użyć zwrotu „zalecana procedura”), dzięki czemu można być pewnym, że VBScript nie potraktuje wartości jako ciągu znaków czy, co gorsza, równania matematycznego (3 podzielone przez 1, podzielone przez 2008).

Po przypisaniu wartości atrybutowi AccountExpirationDate, wywołujemy metodę SetInfo i wprowadzamy zmiany do menedżera konta systemowego SAM na komputerze atl-ws-01. Metoda SetInfo z grubsza odpowiada poleceniu Zapisz w aplikacjach takich jak Microsoft Word. W dokumencie Word można umieścić dowolną ilość informacji, ale jeśli ich nie zapiszemy, wszystko pójdzie na marne. Podobnie jest przy modyfikowaniu wartości atrybutów za pomocą ADSI. Atrybutowi AccountExpirationDate (czy jakiemukolwiek innemu) możemy przypisać dowolną wartość, ale zmiany nie zostaną zastosowane ani zapisane bez użycia SetInfo. W tym momencie możemy trochę pokombinować. Załóżmy, że chcemy założyć tymczasowe, 30-dniowe konto dla Kena Myera na komputerze atl-ws-01. Oto skrypt, który ustawia datę wygaśnięcia na 30 dni od dnia bieżącego:

Set objUser = GetObject("WinNT://atl-ws-01/kenmyer")



objUser.AccountExpirationDate = Date + 30 

objUser.SetInfo

Rzecz jasna, jeśli zaczniemy zmieniać daty wygaśnięcia kont na komputerze atl-ws-01, to prędzej czy później się w nich pogubimy. Na taką ewentualność dobrze mieć w zanadrzu poniższy skrypt:

On Error Resume Next



Set objAccounts = GetObject("WinNT://atl-ws-01")

objAccounts.Filter = Array("User")



For Each objUser In objAccounts

   If IsNull(objUser.AccountExpirationDate) Then

       Wscript.Echo objUser.Name, "- brak ustawionej daty wygaśnięcia."

   Else

       Wscript.Echo objUser.Name, objUser.AccountExpirationDate

   End If

Next

Łączymy się z menedżerem SAM na komputerze atl-ws-01, następnie stosujemy filtr (Filter), dzięki któremu pobierzemy wyłącznie informacje o kontach użytkowników. (Gdyby nie filtr, uzyskalibyśmy informacje o grupach, drukarkach, usługach i wszystkim innym, co jest zapisane w menedżerze SAM.) Następnie uruchamiamy pętlę For Each, która przejdzie przez całą kolekcję kont użytkownika; wewnątrz pętli używamy funkcji IsNull, która wyszuka konta bez daty wygaśnięcia:

If IsNull(objUser.AccountExpirationDate) Then

Jeśli wartość AccountExpirationDate będzie pusta, wywołamy informujący o tym komunikat. Jeśli natomiast pętla znajdzie konta z ustawioną datą wygaśnięcia, komunikat poda tę datę:

Wscript.Echo objUser.Name, objUser.AccountExpirationDate

Ostateczny wynik powinien wyglądać mniej-więcej tak:

Administrator - brak ustawionej daty wygaśnięcia.

ASPNET - brak ustawionej daty wygaśnięcia.

Guest Account - brak ustawionej daty wygaśnięcia.

HelpAssistant - brak ustawionej daty wygaśnięcia.

kenmyer 3/1/2008

pilarackerman 6/1/2007

To tyle, jeśli chodzi o VBScript. Teraz zostało tylko czekać, aż June zajmie się skryptem w Windows PowerShell. No i poszukać kogoś, kto za nas będzie się zajmować skryptami w VBScript…

 Do początku strony Do początku strony

Centrum Skrypciarzy - Systemy Operacyjne