Centrum Skryptóe - Systemy Operacyne

Jak ustawić datę i godzinę w komputerze?

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 ustawić datę i godzinę w komputerze?

Cześć Skrypciarze! Pytanie

Cześćm, Skrypciarze! Jak ustawić datę i godzinę w komputerze?

-- KM

Cześć Skrypciarze! Odpowiedź

Cześć, KM. Tak mnie jakoś dzisiaj naszło, że strasznie żałuję, że forum informatyczne TechEd już się skończyło. Na początku po powrocie bardzo się cieszyłem, że nareszcie w domu, miałem już dość hoteli i w ogóle. A teraz sobie myślę, jak smutny jest taki powrót do rzeczywistości. Praca, psujący się samochód, hipoteka, rodzinne sprawy, życie.

Może wcale nie jest tak źle. Po prostu tam było bardziej kolorowo.

Żeby bardziej wczuć się w swojski domowy klimat napisałem skrypt ustawiający datę i godzinę na komputerze. Oto on:

dtmNewDateTime = "20071115132000.000000-480"



strComputer = "."



Set objWMIService = GetObject("winmgmts:{(Systemtime)}\\" & strComputer & "\root\cimv2")



Set colOSes = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

 

For Each objOS In colOSes

    objOS.SetDateTime dtmNewDateTime

Next

Jedna uwaga z mojej strony przed rozpoczęciem omawiania tego skryptu. Ten skrypt naprawdę zmieni czas na komputerze, ale może to stanowić pewien problem w przypadku, jeżeli komputer jest uczestnikiem domeny usługi katalogowej Active Directory. Usługa katalogowa Actove Directory opiera się na fakcie, iż czasy na komputerach są zsynchronizowane; jeżeli czas jednego komputera będzie zbyt daleko odbiegał od czasu kontrolera domeny, zalogowanie do sieci nie będzie możliwe. (Możliwe będzie natomiast zalogowanie do samego komputera.) Podobnie, usługa katalogowa Active Directory cały czas dąży do tego, aby czasy komputerów były zsynchronizowane; nawet jeżeli uda się zalogować do domeny, istnieje duże prawdopodobieństwo, że wcześniej czy później Active Directory ten czas zaktualizuje. To może nie stanowić dla nas problemu, a już na pewno nie będzie, jeżeli komputer użytkownika nie należy do domeny usługi katalogowej Active Directory. Warto jednak mieć to na uwadze.

Uwaga. Chciałbym dodać do powyższego jeszcze, że czas komputera jest zmieniany często w ceku przeprowadzenia testów, nawet w domenie usługi katalogowej Active Directory.

Zatem jak ten skrypt działa? No cóż, najpierw przypisujemy nową datę i godzinę do zmiennej o nazwie dtmNewDateTime, do tego służy nam pierwszy wiersz kodu:

dtmNewDateTime = "20071115130000.000000-480"

Wiecie co? Macie rację; nie wygląda to za bardzo jak wartość daty i godziny. Jest tak dlatego, że usługa WMI stosuje tzw. format UTC (Universal Time Coordinate). Mimo że ten format UTC wygląda dość dziwnie, to naprawdę jest wartość daty i godziny:

  • Pierwsze cztery znaki (2007) reprezentują rok.
  • Następne dwa znaki (11) reprezentują miesiąc.
  • Kolejne dwa znaki (15) reprezentują dzień.
  • Następne trzy znaki (13) reprezentują godzinę w formacie 24-godzinnym. Dla niewtajemniczonych, godzina 13 oznacza to samo, co 1 po południu.
  • Kolejne dwa znaki (00) reprezentują sekundy.
  • Wartość .000000 reprezentuje milisekundy.
  • -480 reprezentuje „przesunięcie” względem czasu uniwersalnego Greenwich. -480 oznacza, że strefa czasowa, w której znajduje się dany komputer jest 8 godzin (480 minut) do tyłu w stosunku do czasu uniwersalnego Greenwich. Innymi słowy, jeżeli w Redmond w stanie Waszyngton jest 12:00 w południe, to w Greenwich w UK będzie 8:00 wieczorem.

Uwaga. Skąd niby mamy wiedzieć, jakie jest „przesunięcie” względem czasu uniwersalnego Greenwich? Zajrzyjcie do przewodnika Microsoft Windows 2000 Scripting Guide (j.ang.) w celu uzyskania odpowiedzi.

Jak widzimy, na potrzeby tego skryptu utworzyliśmy własną wartość UTC; dzięki temu skrypt może zadziałać na wersjach systemu starszych niż Windows XP. Jeżeli na komputerze zainstalowany jest system operacyjny Windows XP lub nowsza wersja systemu Windows, w celu utworzenia własnej wartości UTC można zastosować obiekt WbemScripting.SWbemDateTime:

Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")



objSWbemDateTime.SetVarDate #11/15/2007 1:20 PM#, True

dtmDateTime = objSWbemDateTime.Value



Wscript.Echo dtmDateTime

Więcej informacji znajduje się w naszym artykule It’s About Time (Oh, and About Dates, Too) (j.ang.), opublikowanym w czasopiśmie TechNet Magazine.

Uzyskanie prawidłowej wartości UTC to w zasadzie trudniejsza cześć skryptu. Kiedy już mamy tę wartość, łączymy się z usługą WMI na lokalnym komputerze. (Chociaż możliwe jest uruchomienie tego skryptu na zdalnym komputerze; wystarczy przypisać nazwę tego zdalnego komputera do zmiennej strComputer.) Następnie stosujemy poniższy wiersz kodu w celu pobrania kolekcji systemów operacyjnych używanych aktualnie na komputerze:

Set colOSes = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

Uwaga. Dlaczego powiedziałem „aktualnie używanych”, a nie zainstalowanych? To proste: w ten sposób działa klasa Win32_OperatingSystem. Przekazuje ona informacje wyłącznie o aktualnie używanym systemie operacyjnym; nie mówi natomiast nic na temat innych systemów operacyjnych, które mogą być zainstalowane na komputerze z opcją startu z wyborem systemu.

Teraz uruchamiamy pętlę For Each, która przejdzie przez każdy element w kolekcji (pomimo, iż nigdy nie będzie w niej więcej niż jeden element). Wewnątrz tej pętli wywołujemy tylko metodę SetDateTime przekazujemy metodzie SetDateTime utworzoną wcześniej wartość UTC:

objOS.SetDateTime dtmNewDateTime

Czas na komputerze zmieni się tak po prostu. I wszyscy będą żyli długo i szczęśliwie.

Mam nadzieję, że to jest upragniona odpowiedź na Twoje pytanie, KM. Ja wracam do przyzwyczajanie się do szarej rzeczywistości.

 Do początku strony Do początku strony

Centrum Skryptóe - Systemy Operacyne