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 (16)

  1. Sergey

    за скрипт спасибо, но TZUtil.exe приезжает на системы Vista/Server 2008 с каким-то майским фиксом. Как раз для России 😉 support.microsoft.com/…/2556308

    Сорри, забыл упомянуть об этом.

  2. Anonymous says:

    -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

  3. Anonymous says:

    Верховная зРада, усердно хочет вернуть "зимнее" время, но у неё это пока не получается 🙂 вот сегодня провалили голосование на эту тему.

    А по теме – там в тексте опечатка – не TZUTIL /z…, а TZUTIL /s…, в скрипте правильно, а в пояснении неправильно, и да – в XP часовой пояс нужно указывать без кавычек.

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

  5. Anonymous says:

    Очень актуально!

  6. Anonymous says:

    В чем суть декабрьского  обновления от 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"

  7. Dekus says:

    http://dimdim.org.ua/time2011/ – для тех у кого еще и никсовые сервера бывают

  8. observer75 says:

    Еще интереснее будет, если Львовская область решит в индивидуальном порядке решит оставить все по старому, т.е переводить часы.

    Тогда пользователям до декабря месяца ничего делать не придется 🙂

  9. Евгений says:

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

  10. Ваш скрипт не будет работать на системах 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

    }

  11. Igor,

    Отличная новость. Значит мой скрипт будет работать и на Висте с установленным апдейтом. 🙂

  12. scream says:

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

  13. Nolf says:

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

  14. AronaX says:

    Есть более простой способ для смены зоны на 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

Skip to main content