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