2014-10-03

Смена часовых поясов в XP средствами GPO

Все админы, наверное, готовятся сейчас к предстоящему переезду в новые часовые пояса. И основная проблема - это XP, которая местами еще осталась, и для которой отсутствуют патчи от MS.

Для московского региона я состряпал скрипт, который предлагаю скачать: tzdata_xp_patch_moscow_time.7z

Архив включает экспортированный из реестра 2003го сервера набор новых зон и VBS-скрипт:


strComputer = "."
 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")        
Set colOperatingSystem = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystem
ServicePack = objOperatingSystem.ServicePackMajorVersion
Version = objOperatingSystem.Version

Next





IF Mid(Version,1,3)="5.1" Then

Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "regedit /s tzdata_w2k3_zone_list.reg"
oShell.run "control.exe timedate.cpl,,/z Russian Standard Time"

ELSE

'DO NOTHING 


'Set oShell = WScript.CreateObject ("WScript.Shell")
'oShell.run "regedit /s tzdata_w2k3_zone_list.reg"
'oShell.run "control.exe timedate.cpl,,/z Russian Standard Time"


END IF

Как можно понять, скрипт проверяет версию ядра Windows и если она равна 5.1 (это ядро используется в XP), то сначала импортируется reg-файл с зонами, а после выставляется дефолтная - Russian Standard Time.

Стоит учитывать, что данный "патч" можно установить заранее, как и официальный, так как новая зона до 26го октября имеет "летнее время", компенсируя час разницы.

При желании скрипт можно легко модифицировать, изменив проверку ядра системы, или имя текущей зоны, и запустить средствами GPO.

Все зоны лежат в реестре: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones], имя зоны = имени "папки" реестра.

UPD.:
Тестирование показало, что скрипт идеально работает при запуске руками, но какого-то хрена не выполняется как Startup-скрипт из GPO. Изрядно поебавшись, кажется прихожу к решению:

  1. заменить VBS-скрипт следующим двухстрочным CMD:
    regedit /s tzdata_w2k3_zone_list.reg
    control timedate.cpl,,/z Russian Standard Time
  2. Применить на политику WMI-фильтр:
    SELECT * FROM Win32_OperatingSystem WHERE Version LIKE "5.1%"  AND ProductType = 1
В целом это решение видится даже более правильным, хотя до сих пор WMI-фильтрами мне пользоваться не доводилось, почему и в голову сразу не пришло.