jueves, 14 de noviembre de 2013

Cambiar zona horaria de Windows en varios ordenadores



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

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.

No hay comentarios:

Publicar un comentario