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

ВНИМАНИЕ! Поскольку Верховная Рада теперь приняла закон О ПЕРЕХОДЕ на зимнее время – игнорируйте информацию данной статьи – т.е. если вы по прежнему остаетесь на часовом поясе UTC +02:00 – на нем и оставайтесь, если же уже перешли на UTC +03:00 – вернитесь на UTC +02:00.

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

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

ua4 (2)Рецепт счастья прост – такая часовая зона уже существует, и не где-нибудь в Африке, а ближе – в Калининграде. Т.е. достаточно в настройках времени ваших систем просто установить часовой пояс 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 (или любого другого источника) и для каждой выполнит удаленный вызов при помощи:

o Invoke-Command в PowerShell

o Win32_Process.Create с использованием классов WMI и VBScript (готовые примеры скриптов по перебору списка ПК и по удаленному исполнению можно найти здесь http://gallery.technet.microsoft.com/ScriptCenter/)

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

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

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

Comments

  • Anonymous
    January 01, 2003
    Sergey за скрипт спасибо, но TZUtil.exe приезжает на системы Vista/Server 2008 с каким-то майским фиксом. Как раз для России ;) support.microsoft.com/.../2556308 Сорри, забыл упомянуть об этом.

  • Anonymous
    January 01, 2003
    -cut- команду control.exe timedate.cpl,,/z "Kaliningrad Standard Time" – как это делалось в командной строке Window XP -cut- Команда control.exe timedate.cpl,,/z "Kaliningrad Standard Time не меняет часовой пояс, нужно  без кавычек выполнять. Почему сразу не поставить часовой пояс Nairobi без пакета обновления? support.microsoft.com/.../2570791 Часовой пояс Nairobi control.exe timedate.cpl,,/z E. Africa Standard Time

  • Anonymous
    January 01, 2003
    Верховная зРада, усердно хочет вернуть "зимнее" время, но у неё это пока не получается :) вот сегодня провалили голосование на эту тему. А по теме - там в тексте опечатка - не TZUTIL /z..., а TZUTIL /s..., в скрипте правильно, а в пояснении неправильно, и да - в XP часовой пояс нужно указывать без кавычек.

  • Anonymous
    January 01, 2003
    Забыл добавить, что, естественно, для его работоспособности на Висте, нужно заменить версию ОС с 6.1 на 6.0.

  • Anonymous
    January 01, 2003
    Очень актуально!

  • Anonymous
    January 01, 2003
    Спасибо!

  • Anonymous
    January 01, 2003
    В чем суть декабрьского  обновления от Microsoft для Украины? Добавить в реестр что то типа такого: [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionTime ZonesUkraine Standard Time] "TZI"=hex:4c,ff,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 "Index"=dword:0000009b "Dlt"="Ukraine Standard Time" "Display"="(GMT+03:00) Kyiv" "MapID"="-1,67" "Std"="Ukraine Standard Time"

  • Anonymous
    October 11, 2011
    http://dimdim.org.ua/time2011/ - для тех у кого еще и никсовые сервера бывают

  • Anonymous
    October 12, 2011
    Еще интереснее будет, если Львовская область решит в индивидуальном порядке решит оставить все по старому, т.е переводить часы. Тогда пользователям до декабря месяца ничего делать не придется :)

  • Anonymous
    October 12, 2011
    Классно было бы во Львовской области сделать часовой пояс как в Польше, будет в самый раз!

  • Anonymous
    October 18, 2011
    Ваш скрипт не будет работать на системах Vista/2008, т.к. в них нет утилиты tzutil.exe, а метод с использованием control.exe не работает (Deployment Guys: "Unfortunately, the control.exe method no longer works on Windows Vista."). В моей компании мы решили этот вопрос с помощью SCCM. Максимально упростил свой скрипт. Может кому пригодится. Сохранить как .ps1. По-умолчанию работает на локальном компьютере, но создан для удалённой смены зоны посредством WMI. На Vista/2008 не сработает, в лучшем случае выдаст "Command executed successfully, but did not take effect". param (  [String]$ComputerName = $Env:COMPUTERNAME,  [String]$TimeZone = "Kaliningrad Standard Time" ) $ErrorActionPreference = "Stop" trap {  Write-Host ("Command {0} failed: {1}" -f $.InvocationInfo.MyCommand.Name, $.Exception.Message) -ForegroundColor Red  exit 1 } if ((Get-WmiObject Win32_OperatingSystem -ComputerName $ComputerName).Version -ge 6.1) {  $Command = "cmd.exe /c tzutil.exe /s "$TimeZone"" } else {  $Command = "cmd.exe /c control.exe timedate.cpl,,/z $TimeZone" } $InvocationResult = Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList $Command -ComputerName $ComputerName -EnableAllPrivileges Start-Sleep -Seconds 5 if ($InvocationResult.ReturnValue -eq 0) {  if ((Get-WmiObject Win32_TimeZone -ComputerName $ComputerName).StandardName -ne $TimeZone) {    Write-Warning "Command executed successfully, but did not take effect"  }  else {    Write-Host "Time zone changed successfully" -ForegroundColor Green  } } else {  Write-Host "Command failed to execute. Return code: $($InvocationResult.ReturnValue)" -ForegroundColor Red }

  • Anonymous
    October 18, 2011
    Igor, Отличная новость. Значит мой скрипт будет работать и на Висте с установленным апдейтом. :)

  • Anonymous
    October 18, 2011
    korrespondent.net/.../1273607-reshenie-rady-ukraina-30-oktyabrya-perejdet-na-zimnee-vremya

  • Anonymous
    October 18, 2011
    Вот не зря я не стал торопиться с переходом на Калининград. Чем-то я все-таки чуял, что есть там еще умные люди, которые смогут организовать благодетельный акт кнопкодавства и убедить баранов жирномордых в том, что они таки тупые. )))

  • Anonymous
    October 26, 2011
    Как видим все таки придется еще раз перевести время) хотя кто их знает время еще есть, могу все поменять)))

  • Anonymous
    October 28, 2011
    Есть более простой способ для смены зоны на XP и Vista/7/2008: cd %SYSTEMDRIVE%Users && goto Win_7 || goto Win_XP :Win_XP CONTROL TIMEDATE.CPL,,/Z FLE Standard Time exit :Win_7 tzutil /s "FLE Standard Time" exit