Programar el reinicio de los servidores es una práctica saludable: permite aplicar actualizaciones y ayuda a liberar memoria. Hay muchas formas de hacerlo; en este recordatorio os explico cómo lo hice yo. El ejemplo funciona con Windows Server 2003, 2008, 2008 R2, 2012, 2012 R2, 2016…
Primero elegí uno de los servidores para enviar la orden de reinicio al resto. En mi caso, el controlador de dominio principal. Como tenemos muchos servidores y no se pueden reiniciar todos a la vez, hice grupos de reinicio. Vosotros podéis hacer lo mismo, con tantos grupos como haga falta.
Para los avisos por correo usé SendEmail, un programa gratuito que envía correos desde la línea de comandos. Solo hay que descargarlo y descomprimirlo en una carpeta, por ejemplo C:\Scripts.
Preparé un fichero llamado reboot_alert_group1.cmd en C:\Scripts con un aviso por correo parecido a este:
reboot_alert_group1.cmd
c:\Scripts\sendemail.exe -f noreply@MyDomain.com -t MyEmail@MyDomain.com -u "Starting Server restart tasks 1" -m "Now we are restarting servers: Server01, Server02, Server03" -s smtp.office365.com:587 -xu ValidMail@MyDomain.com -xp MyEmailPassword
Como veis, no tiene ningún secreto:
sendemail.exe -f "remitente" -t "destinatario" -u "asunto" -m "mensaje" -s "servidor SMTP" -xu "usuario para autenticarse en el SMTP" -xp "contraseña de ese usuario"
Después preparé otro fichero, restart_servers_group1.cmd, que llama a reboot_alert_group1.cmd y envía la orden de reinicio a los servidores con PowerShell:
restart_servers_group1.cmd
call reboot_alert_group1.cmd powershell restart-computer "Server01","Server02","Server03" -force
Antes de ejecutarlo, os recomiendo comprobar el acceso remoto a esos servidores con PowerShell. Abrid la línea de comandos, ejecutad powershell y probad este comando, cambiando Server01 por el nombre del servidor que queréis probar:
PS C:\Scripts> gwmi win32_networkadapterconfiguration -computername Server01 -filter "ipenabled = 'true'" -erroraction stop | select dnshostname,ipaddress,defaultipgateway,dnsserversearchorder,winsprimaryserver,winssecondaryserver | ft -property * -autosize | out-string -Width 4096
Si funciona, ya lo tenéis. Si da un error de conexión, probablemente tendréis que permitir la «Administración remota» desde vuestra IP en el cortafuegos del servidor.
Programad las tareas de reinicio de esta forma y repetidlo para cada grupo de servidores:
Para recibir un aviso cuando los servidores vuelven a estar en línea usaremos el mismo programa, SendEmail. Solo hay que copiar sus ficheros en C:\Scripts en cada servidor y preparar un fichero con el mensaje. En mi caso, rebootalert.cmd:
rebootalert.cmd
c:\Scripts\sendemail.exe -f noreply@MyDomain.com -t MyEmail@MyDomain.com -u "Server01 has booted by scheduled task" -m "Server01 has booted by scheduled task!" -s smtp.office365.com:587 -xu ValidMail@MyDomain.com -xp MyEmailPassword
Y en cada servidor creamos una tarea programada que ejecute rebootalert.cmd al arrancar:
Nota: estos ficheros .cmd contienen la contraseña de la cuenta de correo en texto plano. Proteged la carpeta con permisos NTFS para que solo tengan acceso los administradores.
¡Y eso es todo!
Traducción hecha con ayuda de IA a partir del artículo original.














