In diesem Beitrag soll gezeigt werden wie mit PowerShell alle Domänen-Computer neu gestartet werden können – ohne einer Enterprise Lösung.
Vorbereitung
Liste aller Computer aus einer OU abrufen
Ich benötige eine Liste aller Domänen-Computer. In einer aufgeräumten, sauberen Umgebung (diese ist nicht so häufig vorzufinden wie der Leser denkt) sind alle Domänen-Computer in einer eigenen Organisationseinheit untergebracht. Ist das der Fall dann kann die Liste aller Computer dort abgerufen werden.
(Get-ADComputer -Filter * -SearchBase "OU=Workstations,DC=pagr,DC=inet").Name | Out-File c:\Temp\computers.txt
Das ergibt eine Liste nach Namen. Warum eine Liste und keine Variable? Das eine schließt das andere nicht aus. Aber ich habe es gern dokumentiert in einer Liste um diese auszudrucken und zu archivieren.
Liste aller Computer mithilfe des Attributs Operatingsystem abrufen
Wie schon erwähnt sind aufgeräumte Umgebungen rar. Deshalb kann es sein, dass die Domänen-Computer irgendwo herumliegen, es herrscht ein Tohuwabohu (ein heißer Tipp: Container Computers). Wenn das der Fall ist, dann kann man nach dem Attribut Operatingsystem fragen um auch alle zu erwischen. Alle Client-Computer, aber keine Server.
(Get-ADComputer -Filter 'operatingsystem -notlike "*server*"').Name | Out-File C:\Temp\computers2.txt
Die Firewall Regel WMI eingehend
Die Firewall-Regel WMI eingehend muss auf allen Domänen-Computern aktiviert sein. Dies kann in einer Testumgebung manuell erfolgen, oder per Gruppenrichtlinie in einer Echt-Umgebung.
Neustart aller Domänen-Computer
Ich empfehle allen Lesern in einer Echt-Umgebung, jetzt inne zu halten und die Liste sorgfältigst zu kontrollieren. Denn jetzt werden alle Rechner neu gestartet, ohne Rücksicht auf Verluste. Geöffnete Dateien werden nicht gespeichert und der Benutzer wird abgemeldet. Das kann unangenehm werden, wenn man die “Falschen” erwischt. Für den Neustart verwende ich das Cmdlet Restart-Computer.
Restart-Computer -ComputerName (Get-Content C:\Temp\computers.txt) -Force -ErrorAction SilentlyContinue -ErrorVariable NoRestart
Der Parameter -Force erzwingt einen Neustart, auch wenn Benutzer angemeldet sind. Der Parameter -ErrorAction zeigt keine Errors an (Computer in der Datenbank müssen nicht zwingend online sein). Der Parameter -ErrorVariable speichert Fehler eben in dieser Variable.
Errors
Der Parameter -ErrorVariable speichert Fehler in einer Variable. Die Maschine Client01 ist nicht erreichbar, weil nicht in Betrieb.
Die Liste der Computer, welche nicht neu gestartet haben, werden nun von mir mit dem Computernamen gespeichert. Das Error Attribut targetobject machts möglich.
$NoRestart.targetobject | Out-File C:\Temp\NoRestart.txt
Fazit
Die oben beschriebene Vorgehensweise ist nicht mit einer Enterprise Lösung wie SCCM vergleichbar. Wer aber eine solche nicht zur Verfügung hat, der wird hier fündig.
Für Interessierte: Ich habe auch einen Beitrag über das Abrufen von Hardware-Informationen aller Domänen Computer erstellt und der nennt sich WMI: Hardwarekonfiguration aller Domänen-Computer abrufen und speichern.
Categories: Cyber Security, PowerShell, Windows Server
2 replies »