Kак HE ДАТЬ своим Windows перейти на зимнее время

12 октябрь, 2011 - 09:10Игорь Шаститко

Итак, Верховная Рада Украины приняла абсолютно внезапно закон о том, что с 30 октября 2011 г. такая большая по протяженности с востока на запад страна, как Украина, переходить на зимнее время не будет. Не будем рассматривать аспекты того, что в западных областях светать зимой будет в 10:00 утра, вопрос в другом – как быть ИТшникам и вообще – всем пользователям компьютеров, которых этим постановлением просто «выкинули» из привычного часового пояса UTC +02:00 Хельсинки, Киев, Рига, София, Таллинн, Вильнюс? Часы-то на всех компьютерах переведутся!

Естественно, с момента принятия такого эпохального закона прошло не так много времени и вероятность появления нового патча от Microsoft для очередного «дробления» часовых поясов за столь короткий срок минимальна (напомню, что полугодом ранее Россия приняла такой же закон, но поставила в известность всех еще в марте о планируемом отказе от зимнего времени в октябре и патч был выпущен в августе). Но, понимая серьезность проблемы, 5 октября 2011 г. на сайте поддержки Microsoft появилась статья о том, что делать украинским пользователям Windows, чтобы часы не перевелись «как не надо» – все желающие познакомиться с первоисточником могут это сделать здесь http://support.microsoft.com/kb/2625508.

Kак HE ДАТЬ своим Windows перейти на зимнее время

Рецепт счастья прост – такая часовая зона уже существует, и не где-нибудь в Африке, а ближе – в Калининграде. Т.е. достаточно в настройках времени ваших систем просто установить часовой пояс UTC +03:00 Калининград, при условии, как указано в статье на сайте поддержки, что у вас уже установлены на компьютере последние обновления часовых поясов, выпущенные в августе 2011 г. – http://support.microsoft.com/kb/2570791. Кстати, я бы не торопился их качать вот так сразу, а просто установил бы их через штатные механизмы обновления Windows.

И, конечно же, не забудьте все вышеуказанное сделать до 30 октября 2011 г., иначе часики-то переведутся.

Вроде все легко и понятно, но есть одно большое НО – а что, если у меня не 1, 2 и даже не 10 компьютеров, где подобную операцию можно проделать за 5 минут.

А что, если компьютеры исчисляются сотнями и тысячами? Тогда рецепт еще более прост – запускаем скрипт, и все будет в шоколаде. Хотя тут тоже стоит перед нами два вопроса – какой скрипт и как запускать.

Первый вопрос – «какой скрипт?» – наиболее простой. Вот этот скрипт на PowerShell (взятый отсюда http://blogs.technet.com/b/deploymentguys/archive/2009/06/07/setting-the-time-zone-using-windows-powershell.aspx и слегка модифицированный и который можно использовать и как отдельные команды, и в варианте VBScript – кому как нравится):

$timeZone = "Kaliningrad Standard Time"
$regVer = Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$winVer = $regVer.GetValue("CurrentVersion")
if ($winVer -GE 6){
tzutil.exe /s $timeZone

} Else {
$param = "/c Start `"Change TimeZone`" /MIN %WINDIR%\System32\Control.exe TIMEDATE.CPL,,/z "
$param += $timeZone
$proc = [System.Diagnostics.Process]::Start( "CMD.exe", $param)
}

Краткое пояснение работы скрипта, вдруг вы не нуждаетесь в столь универсальном инструменте:

  • Скрипт проверяет версию ОС, и:
    • если она выше или равна Windows Vista/Windows Server 2008 – то для изменения часового пояса используется новая команда – TZUTIL /z «Kaliningrad Standard Time»
    • если скрипт запущен на Windows XP/Windows Server 2003 и ниже – использует для изменения часового пояса команду control.exe timedate.cpl,,/z «Kaliningrad Standard Time» – как это делалось в командной строке Window XP

и по второму вопросу – «как запустить скрипт на всех компьютерах в сети?» – все просто:

  • групповые политики и их стартап-скрипты (в варианте с Windows 7 имеется также и возможность явно указывать запуск PowerShell), можно использовать отдельные скрипты/команды для разных типов ОС, фильтруя при этом политики через WMI
  • У вас есть System Center Configuration Manager – тогда вообще супер! просто добавьте пакет со скриптом, назвав его гордо «патчем»
  • и ручной вариант – выполнить нужный набор команд (не обязательно полный скрипт, указанный выше) через еще один скрипт, который получит список машин из Active Directory (или любого другого источника) и для каждой выполнит удаленный вызов при помощи:
    • Invoke-Command в PowerShell
    • Win32_Process.Create с использованием классов WMI и VBScript (готовые примеры скриптов по перебору списка ПК и по удаленному исполнению можно найти здесь http://gallery.technet.microsoft.com/ScriptCenter/)

Думаю, это вам поможет. Приглашаю всех заинтересованных делиться тут своими вариантами скриптов для установки часового пояса и, особенно, для распространения на сотни и тысячи машин в корпоративных сетях. Буду дописывать в этом посте с указанием авторов. Торопитесь, времени совсем мало осталось.

И остается надеяться, что очередную «рукотворную проблему 2000 года» Украина нормально переживет.

P.S. А вот полноценный патч с отдельным часовым поясом для Украины будет выпущен Microsoft уже в декабре 2011, если верить все тому же первоисточнику – http://support.microsoft.com/kb/2625508