Eine gute Möglichkeit, jeden Abend alle Computer in einer Windows-Domäne neu zu starten


9

Was ist eine gute Möglichkeit, um eine Liste von Windows-Computern in einer Windows-Domäne neu zu starten? Angenommen, der Windows-Domänencontroller verfügt nicht über einen Dienst, um dies zu tun, empfehlen Sie ein Skript.

Kann ich die Hostnamen auflisten und die Hostnamen durchlaufen, um jeweils einen Neustartbefehl zu senden? Kann ich eine Liste der Hostnamen vom DHCP-Server abrufen, der zur Laufzeit des Skripts in einer Windows 2008-Umgebung ausgeführt wird?

Meine bevorzugten Skriptsprachen sind: PHP, Javascript, Bash, Python (weiß sehr wenig), VB (weiß es, aber mag es nicht)


8
Den Schalter umlegen. Ich kind
Gravyface

das würde ein Herunterfahren verursachen, ich brauche einen Neustart.
Steampowered

@JM - nicht, wenn sie im BIOS auf "Vorherigen Energiezustand wiederherstellen" eingestellt sind.
Fake Name

@Fake Name - das klingt nach viel Arbeit
steampowered

Antworten:


15

Wenn GPO nicht Ihr Ding ist und Sie Mark Hendersons zweite Option (Batching shutdown /m) wählen möchten, können Sie Ihre Arbeit vereinfachen, indem Sie das Herunterfahren im Batch-Modus ausführen, sodass sie parallel und nicht seriell ausgeführt werden. Es erfordert PowerShell seitens der Admin-Station, ist aber sehr geschickt .

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

Dieses Fragment erzeugt so viele Hintergrundjobs , die parallel ausgeführt werden, wie sich Computer in $ ComputerList befinden. Dies kann dazu führen, dass All The Things viel schneller heruntergefahren wird.


2
Dies ist eine interessante Lösung - wenn Sie eine Menge Computer zum Neustart haben, kann ich diese Lösung nur empfehlen, da die Befehle zum Herunterfahren parallel ausgeführt werden.
Richard West

2
Das -AsJobist das magische Stück hier.
Jscott

Ich bin gespannt, warum Sie den Befehl "shutdown" anstelle des Cmdlets "Restart-Computer" verwenden.
Charles Burge

@CharlesBurge Dies wurde vor 5 Jahren beantwortet und PS3 war nicht weit verbreitet. Dies demonstriert auch die Technik der Ausführung von Befehlen auf anderen Systemen. Im Jahr 2017 haben wir einfach alles in PowerShell erledigt und uns nicht um Befehle gekümmert. Zeiten ändern sich.
sysadmin1138

7

Sie können dies mit den Gruppenrichtlinieneinstellungen tun, indem Sie eine neue geplante Aufgabe erstellen, die jede Nacht zu einer bestimmten Zeit ausgeführt wird. Der Befehl für diese Aufgabe sollte lauten shutdown /r /t 0. Sie können dieses Gruppenrichtlinienobjekt dann mit der Organisationseinheit oder den Organisationseinheiten verknüpfen, in denen sich Ihre Computer befinden.

Möglicherweise möchten Sie die Option "Dieses Programm in zufälligen Intervallen ausführen" verwenden, die zwischen 10 und 15 Minuten liegt. Wenn Sie nicht aufpassen, dass alle Computer gleichzeitig hochgefahren werden, kann dies eine negative Auswirkung auf Ihre Leistungsschalter haben. Möglicherweise möchten Sie auch die Option aktivieren, die Aufgabe nur auszuführen, wenn der Computer x Stunden lang im Leerlauf war, falls jemand einen All-Nighter zieht. Sie möchten die Arbeit einer ganzen Nacht nicht töten, indem Sie jemanden neu starten, der versucht, eine Frist zu setzen.


Ich bin nicht mit dem Festlegen geplanter Aufgaben mit dem Gruppenrichtlinienobjekt vertraut. Daher frage ich mich, ob ein Computer, der ohne die festgelegte Aufgabe von einer Organisationseinheit in eine andere verschoben wird, nach dem erstmaligen Anwenden der Aufgabe "Schuppen" verschwindet oder verbleibt.
MaCuban,

6

Zwei Optionen:

  1. Erstellen Sie eine geplante Aufgabe über ein Gruppenrichtlinienobjekt, das ausgeführt wird, shutdown /r /f /t 0oder shutdown /g /f /t 0auf jedem Computer, den Sie neu starten möchten. ( shutdown /?Weitere Informationen finden Sie hier.

  2. Erstellen Sie einen Stapel, der shutdown /m [computer name] /r /f /t 0auf einem zentralen Computer (möglicherweise dem Domänencontroller?) Ausgeführt wird. Führen Sie für jeden Computer, den Sie neu starten möchten, eine Schleife aus (ändern Sie die [computer name]). Dies bedeutet, dass der Computer nicht neu gestartet wird, wenn er aus irgendeinem Grund nicht erreichbar ist, und von einem Konto ausgeführt werden muss, das zum Neustarten von Computern berechtigt ist.

Sie sollten in der Lage sein, eine Batchdatei zu schreiben, die eine Liste der Computer durchläuft, die aus dem aktiven Verzeichnis abgerufen wurden, und den Befehl ausführt. Ich habe jedoch heute keine Zeit, eine zu schreiben (und ich bin auch nicht bereit, sie zu testen, wenn Ich habe es geschrieben, sonst würde ich mitten am Tag jeden Computer neu starten).


Zusätzlich gibt es einen Befehl psshutdown, der auch eine Batch-Datei durchlaufen kann, ein Teil der Sysinternals-Suite ...
Bart Silverstrim

Ich habe sowohl 1 als auch 2 verwendet. Jetzt viel Spaß mit Powershell. Wenn Sie # 2 verwenden, betrachten Sie den Startvorgang des Hauptskripts für jeden Computer (z. B. start cmd /c shutdown /m computer /r /f /t 0) oder verwenden Sie eine Logik, um zu überprüfen, ob online ist. Andernfalls kann die Verzögerung für Offline-Computer erheblich sein.
jscott

4

Der beste Weg, dies zu tun, besteht darin, die Person zu entlassen, die die Idee hat, dass dies erforderlich ist, und das zu tun, was alle anderen Menschen tun - und das nicht.


Die Ordnerumleitung scheint Ressourcen zu binden, wenn Personen über Nacht angemeldet bleiben. Ich nehme an, ich könnte versuchen, ein Massen-Logout anstelle eines Massen-Neustarts einzurichten, aber ein Neustart scheint so viele Probleme zu lösen. Die Leute gehen Wochen oder Monate ohne Neustart. Normalerweise investiere ich nicht viel Zeit, um zu lernen, wie man Windows-Systeme richtig ausführt, da dies nicht meine Hauptaufgabe ist. Was empfehlen Sie?
Steampowered

1
Ah nein. Unzählige Unternehmen verlangen von ihren Mitarbeitern kein Reboot - Sie glauben, sie verwenden keine Ordnerumleitung? Ich schlage vor, das Problem zu beheben. Ich persönlich wäre sauer, wenn ich jeden Tag von meinem Arbeitsplatz abgemeldet würde - ich lasse Jobs oft über Nacht laufen. Ihre Faulheit kann viele Menschen in Schwierigkeiten bringen - machen Sie Ihren Job richtig oder stellen Sie jemanden ein, der dies tut.
TomTom

Meine Arbeit richtig zu machen bedeutet, nicht zu viel Zeit damit zu verbringen, unser kleines Fenstersystem zu studieren.
Steampowered

Sie wissen nicht, was Sie tun? ;) Ich entlasse Leute, die behaupten, sie seien beruflich inkompetent, unabhängig von ihrer Leistung.
TomTom

Sysadmin ist ein Nebenjob, den ich für meine Familie mache, um ihnen zu helfen. Wenn ich unendlich viel Zeit hätte, würde ich mehr Bücher über Fenster und andere Tangenten lesen. Aber mein bester Weg, Geld zu verdienen, besteht darin, mich an Web-Software zu halten. Ich denke, Ihre Antwort war keineswegs im Sinne einer technischen Lösung der von mir gestellten Frage.
Steampowered
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.