En Windows Server 2008 R2 y 2012 al igual que Windows 7 u 8
existe un comando que permite el comprobar y modificar la zona horaria
configurada en nuestro ordenador, este comando es el tzutil.exe y las opciones
son las siguientes:
/? Muestra información
de uso.
/g Muestra el Id. de
la zona horaria actual.
/s
IdDeZonaHoraria[_dstoff]
Establece la zona
horaria actual con el Id. de la zona especificada.
El sufijo _dstoff
deshabilita los ajustes del horario de verano
para la zona
horaria (donde proceda).
/l Enumera los Id. de
todas las zonas horarias válidas y muestra los
nombres. La salida
es:
<nombre para
mostrar> <Id. de zona horaria>
El problema
es que no permite la ejecución remota de este comando en otros servidores /
ordenadores con lo que tendremos que basarnos en un comando muy útil del
powershell 2.0 y superior que es el Invoke-Command (http://technet.microsoft.com/en-us/library/hh849719%28v=wps.620%29.aspx)
El script
que muestro nos permite modificar la zona horaria a GMT+1 Paris, Madrid, la que
usamos aquí en una serie de ordenadores listados en un fichero CSV.
En el caso
de la zona horaria que cito, su nombre es Romance
Standard Time, si queremos poner otra lo primero que necesitamos saber es
su nombre lo que podemos averiguar ejecutando el comando:
Tzutil /l
Y muestra
una salida como esta:
(UTC+01:00) Amsterdam, Berlín,
Berna, Roma, Estocolmo, Viena
W. Europe Standard Time
(UTC+01:00) Belgrado, Bratislava, Budapest, Liubliana, Praga
Central Europe Standard Time
(UTC+01:00) Bruselas, Copenhague, Madrid, París
Romance Standard Time
Es
recomendable el arrancar el PowerShell en modo Administrador y con un usuario
que sea administrador local de todos los servidores a modificar. En mi ejemplo
se supone que la ejecución remota está permitida y, o bien no existe o en los
firewall se han habilitado las ejecuciones remotas.
Además se ha de permitir la
ejecución de scripts para ello se debe haber ejecutado el comando Set-ExecutionPolicy adecuado.
Lo primero
que debemos generar es el fichero CSV que contendrá todos los ordenadores o
servidores a modificar. El formato que tendrá es similar a este:
Hostname
Server1
Server2
Server3
Server1
Server2
Server3
Hay que
tener en cuenta que la primera línea es la cabecera y no se ha de modificar, el
resto de líneas son cada uno de los servidores a modificar. Lo grabaremos como
Servidores.CSV
El script
que hay que ejecutar es el siguiente:
#
# -- Cambiar la zona horaria indicada en la variable $ZonaHoraria a
# -- todos los servidores pasados en el fichero Servidores.CSV
#
-- Nov. 2013
#
# -- Variables de entorno
$ZonaHoraria="Romance Standard Time"
$Servidores=Import-CSV servidores.csv -Delimiter ","
foreach($Servidor in $Servidores)
{
# -- Comprueba si ya es
la correcta
$Zona=invoke-command -cn
$Servidor.HostName {tzutil /g}
if ($Zona -eq
$ZonaHoraria)
{
Write-Host "El
servidor " $Servidor.HostName "ya estaba en la zona"
$ZonaHoraria
}
else {
invoke-command -cn $Servidor.HostName
{tzutil /s "Romance Standard Time"}
Write-Host "El servidor "
$Servidor.HostName "se ha cambiado a la zona" $ZonaHoraria
}
}
Como se ve
el script comprueba si el servidor ya tiene esa zona configurada o no y muestra
el resultado.
Espero
haber ayudado.