Reinicie todas las computadoras del dominio usando PowerShell
En este artículo muestro cómo forzar el reinicio de todas las computadoras del dominio usando el comando Restart-Computer.
Preparación
Enumere todos los nombres de computadoras por unidad organizacional
Primero, necesito una lista de todas las computadoras del dominio. En un entorno limpio, todas las computadoras del dominio se almacenan en una unidad organizativa separada. Si este es el caso, entonces se puede recuperar allí la lista de todos los ordenadores.
(Get-ADComputer -Filter * -SearchBase "OU=Workstations,DC=pagr,DC=inet").Name | Out-File c:\Temp\computers.txt
Los nombres de las computadoras se almacenan en un archivo. También puedes usar una variable.
Enumere todos los nombres de computadoras por atributo
Como ya se mencionó, los ambientes ordenados son raros. Las computadoras del dominio pueden estar en algún lugar, hay un tohuwabohu (un consejo importante: computadoras contenedoras). Luego puedes buscarlos usando el atributo del sistema operativo para capturarlos todos. Todas las computadoras cliente, pero ningún servidor.
(Get-ADComputer -Filter 'operatingsystem -notlike "*server*"').Name | Out-File C:\Temp\computers.txt
El cortafuegos: WMI entrante
La regla de firewall entrante WMI debe estar habilitada en todas las computadoras del dominio. Esto se puede hacer manualmente o mediante políticas de grupo.
Reiniciar en acción
Recomiendo a todos los lectores que se detengan ahora y se pregunten: "¿Realmente quieren reiniciar todas esas computadoras?" ? Controla atentamente la lista de ordenadores. Ahora todas las computadoras se reinician. Los archivos abiertos no se guardan y el usuario cierra la sesión. Esto podría resultar desagradable si detecta el error.
Restart-Computer -ComputerName (Get-Content C:\Temp\computers.txt) -Force -ErrorAction SilentlyContinue -ErrorVariable NoRestart
El parámetro -Force fuerza un reinicio incluso cuando los usuarios han iniciado sesión. El parámetro -ErrorAction no muestra ningún error (las computadoras en la base de datos pueden estar fuera de línea). El parámetro -ErrorVariable almacena errores en la variable NoRestart.
Errores
Después de completar, puede ver que no se puede acceder a mi máquina client01. Esta información se almacena en la variable NoRestart.
La lista de computadoras que no se han reiniciado se guardará por nombre de computadora. Para verificar, ejecute el siguiente comando para recuperar todas las computadoras "Sin reinicio" por nombre de computadora y guardarlas en un archivo.
$NoRestart.targetobject | Out-File C:\Temp\NoRestart.txt
Conclusión
Este enfoque no reemplaza una solución empresarial como SCCM. Pero para aquellos que no pueden utilizar una solución empresarial, este artículo puede resultar útil para reiniciar todas las computadoras con una sola línea en PowerShell.
Para forzar una actualización de gp en todas las computadoras del dominio, consulte mi artículo: PowerShell: Forzar gpupdate en todas las computadoras del dominio
Para documentar su entorno, consulte: PowerShell: documentar su entorno ejecutando systeminfo en todos los equipos del dominio.


