Cyber Security

PowerShell: Alle Domänen-Computer neu starten

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.

Unbenannt

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.

Unbenannt

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.

Unbenannt.PNG

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.

2 replies »

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.