Una buena manera de reiniciar todas las computadoras en un dominio de Windows cada noche

9

¿Cuál es una buena manera de reiniciar una lista de computadoras con Windows en un dominio de Windows? Suponiendo que el controlador de dominio de Windows no tiene un servicio para hacer esto, haga recomendaciones para un script.

¿Puedo enumerar los nombres de host e iterar a través de los nombres de host para enviar un comando de reinicio a cada uno? ¿Puedo obtener una lista de nombres de host del servidor DHCP que se ejecuta en un cuadro de Windows 2008 en el tiempo de ejecución del script?

Mis lenguajes de scripting preferidos, de los más deseados a los menos deseables, son: PHP, javascript, Bash, Python (sé muy poco), VB (lo sé pero no me gusta)

vapor accionado
fuente
8
voltear el interruptor. Bromeo.
gravyface
eso provocaría un apagado, necesito reiniciar.
impulsado por vapor el
@JM: no si están configurados para "Reanudar el estado de energía anterior" en el BIOS.
Nombre falso el
@Fake Name - eso suena como mucho trabajo
impulsado por vapor el

Respuestas:

15

Si GPO no es lo tuyo, y quieres ir con la segunda opción de Mark Henderson (procesamiento por lotes shutdown /m), puedes hacer tu trabajo más fácil haciendo un trabajo por lotes del apagado para que lo haga en paralelo en lugar de en serie. Requiere PowerShell por parte de la estación de administración, pero es muy ingenioso .

foreach ($ComputerName in $ComputerList) {
    invoke-command -AsJob -ScriptBlock {
        params($ComputerName)
        shutdown /m $ComputerName /r /f /t 0
    } -ArgumentList $ComputerName
}

Lo que hace este fragmento es generar tantos trabajos en segundo plano ejecutándose en paralelo como máquinas en $ ComputerList. Esto puede hacer que cerrar All The Things sea mucho más rápido.

sysadmin1138
fuente
2
Esta es una solución interesante: si tiene muchas computadoras para reiniciar, recomiendo esta solución, ya que ejecutará los comandos de apagado en paralelo.
Richard West
2
La -AsJobes la parte mágica aquí.
jscott
Tengo curiosidad por saber por qué está usando el comando "apagar" en lugar del cmdlet Restart-Computer.
Charles Burge
@CharlesBurge Esto fue respondido hace 5 años, y la PS3 no se implementó ampliamente. Además, esto demuestra la técnica de ejecutar comandos en otros sistemas. En 2017, lo haríamos todo en PowerShell y no nos molestaríamos con los comandos. Los tiempos cambian.
sysadmin1138
7

Puede hacer esto con las Preferencias de directiva de grupo haciendo una nueva tarea programada que se ejecutará todas las noches a una hora determinada. El comando para esa tarea debería ser shutdown /r /t 0. Luego puede vincular ese GPO a la unidad organizativa o unidades organizativas que tienen sus computadoras en ellas.

Probablemente desee utilizar la opción "Ejecutar este programa en un intervalo aleatorio" establecida entre 10 y 15 minutos. Tener cada computadora encendida al mismo tiempo puede ser malo para sus interruptores si no tiene cuidado. También es posible que desee marcar la opción para ejecutar la tarea solo si la computadora ha estado inactiva durante x horas, en caso de que alguien esté haciendo una noche entera. No desea matar el trabajo de una noche completa reiniciando a alguien que está tratando de cumplir un plazo.

MDMarra
fuente
No estoy familiarizado con la configuración de tareas programadas con GPO, por lo que me pregunto: si una máquina se mueve de una unidad organizativa a otra sin la tarea definida, ¿desaparecerá la Tarea de cobertizo o permanecerá después de que se aplica la primera vez?
MaCuban
6

Dos opciones:

  1. Cree una tarea programada a través de GPO que se ejecute shutdown /r /f /t 0o shutdown /g /f /t 0en cada máquina que desee reiniciar. (echa un vistazo shutdown /?para más detalles.

  2. Cree un lote que se ejecute shutdown /m [computer name] /r /f /t 0desde una computadora central (¿tal vez el controlador de dominio?). Haga un bucle para cada computadora que desea reiniciar (cambie [computer name]). Esto significa que la computadora no se reiniciará si es inaccesible por alguna razón, y necesita ejecutarse desde una cuenta que tenga los derechos para reiniciar las computadoras.

Debería poder escribir un archivo por lotes que recorra una lista de computadoras extraídas del directorio activo y ejecute el comando, sin embargo, no tengo tiempo para escribir uno hoy (y no estoy dispuesto a probarlo incluso si Lo escribí, de lo contrario, me verían obligado a reiniciar la computadora de todos en el medio del día).

Mark Henderson
fuente
Además, hay un comando psshutdown que también puede ejecutarse a través de un archivo por lotes, parte de la suite sysinternals ...
Bart Silverstrim
He usado tanto 1 como 2. Ahora me divierto con Powershell. Si usa el n. ° 2, considere la secuencia de comandos principal que genera un proceso separado para cada computadora (por ejemplo start cmd /c shutdown /m computer /r /f /t 0) o use alguna lógica para verificar si está en línea, de lo contrario, el retraso para las computadoras fuera de línea puede ser significativo.
jscott
4

La mejor manera de hacerlo es despedir a la persona que tiene la idea de que esto es necesario y hacer lo que hacen todas las demás personas, no hacer eso.

TomTom
fuente
La redirección de carpetas parece estar bloqueando recursos cuando las personas permanecen conectadas durante la noche. Supongo que podría tratar de configurar un cierre de sesión masivo en lugar de un reinicio masivo, pero el reinicio parece solucionar muchos problemas. La gente pasa semanas o meses sin reiniciar. Por lo general, no invierto mucho tiempo para aprender la forma correcta de ejecutar sistemas Windows porque no es mi trabajo principal. ¿Que recomiendas?
impulsado por vapor el
1
Ah no. Toneladas de empresas no requieren que su gente se reinicie: ¿cree que nunca usarán la redirección de carpetas? Sugiero solucionar el problema en cuestión. Personalmente, me enojaría si me desconectaran de mi estación de trabajo todos los días; a menudo dejo que los trabajos se ejecuten durante la noche. Su pereza puede costarle dificultades a muchas personas: haga su trabajo correctamente o contrate a alguien que lo haga.
TomTom
Bueno, hacer mi trabajo correctamente significa no pasar demasiado tiempo cuidando nuestro pequeño sistema de ventanas.
impulsado por vapor el
¿No sabes lo que haces? ;) Despido a las personas que dicen que son incompetentes en su trabajo, independientemente de cómo sea su desempeño.
TomTom
Sysadmin es un trabajo paralelo que hago para que mi familia los ayude. Si tuviera tiempo infinito seguro, leería más libros sobre ventanas y otras tangentes. Pero mi mejor manera de ganar dinero es apegarme al software web. Creo que su respuesta no fue en absoluto el espíritu de ofrecer una solución técnica a la pregunta que hice.
impulsado por vapor el