Alle PCs in Domäne rebooten
Suche Möglichkeit, alle PCs in Windows-Domäne auf einmal neuzustarten
Hallo,
wie oben beschrieben, suche ich eine Möglichkeit, alle PCs in einer Windows-Domäne auf einmal zu rebooten.
Ich dachte daran, einfach einen Shutdown-Befehl an die Broadcast-Adresse zu senden. Das hat allerdings nicht
funktioniert. Stattdessen kam die Meldung, dass der Client nicht gefunden wurde.
Habt ihr eine Idee, wie ich dieses Problem lösen könnte ?
Vielen Dank für alle Tipps im Vorraus !
Viele Grüße
tbnwadm
Hallo,
wie oben beschrieben, suche ich eine Möglichkeit, alle PCs in einer Windows-Domäne auf einmal zu rebooten.
Ich dachte daran, einfach einen Shutdown-Befehl an die Broadcast-Adresse zu senden. Das hat allerdings nicht
funktioniert. Stattdessen kam die Meldung, dass der Client nicht gefunden wurde.
Habt ihr eine Idee, wie ich dieses Problem lösen könnte ?
Vielen Dank für alle Tipps im Vorraus !
Viele Grüße
tbnwadm
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168937
Url: https://administrator.de/forum/alle-pcs-in-domaene-rebooten-168937.html
Ausgedruckt am: 22.12.2024 um 15:12 Uhr
19 Kommentare
Neuester Kommentar
Hi,
leg dir ne Liste an mit allen Computernamen.
Zusätzlich brauchst du die PSTools und da kannst du mit der PSShutdown.exe die Datei aufrufen und alle neu starten.
psshutdown @File -r -t 00 (wenn ich mich recht Erinner)
VG
leg dir ne Liste an mit allen Computernamen.
Zusätzlich brauchst du die PSTools und da kannst du mit der PSShutdown.exe die Datei aufrufen und alle neu starten.
psshutdown @File -r -t 00 (wenn ich mich recht Erinner)
VG
moinsen,
*hüstel*
Die Reihenfolge ist aber extrem falsch...
Zum Thema shutdown Psstools findest du einiges - was das Batchen angeht - eigene Erfahrungen sind das beste - bau was aus den bisherigen Tipps und wenns nicht weitergeht - helfen wir gerne - aber etwas eigenintiative zu sehen ist voraussetzung.
Gruß
Zitat von @Festus94:
Hallo,
danke für die schnelle Antwort. Kann ich da auch irgendiwe erreichen, dass erst der DC, dann die Terminalserver, dann ein
dritter Server, und dann die ganzen Workstations booten ?
Hallo,
danke für die schnelle Antwort. Kann ich da auch irgendiwe erreichen, dass erst der DC, dann die Terminalserver, dann ein
dritter Server, und dann die ganzen Workstations booten ?
*hüstel*
Die Reihenfolge ist aber extrem falsch...
- eine Liste deiner Kisten bekommst du (wenn du die nicht hast) via net view
for /f "tokens=1 delims=\ " %a in ('netview') do echo %a>alle_clients.txt
- Die sortierst du so, wie die Kisten heruntergefahren werden sollen
- Server am Schluß - nicht am Anfang.....
Zum Thema shutdown Psstools findest du einiges - was das Batchen angeht - eigene Erfahrungen sind das beste - bau was aus den bisherigen Tipps und wenns nicht weitergeht - helfen wir gerne - aber etwas eigenintiative zu sehen ist voraussetzung.
Gruß
Server automatisch/per Skript neu starten?
Ob das mal ne gute Idee ist...
Anyway, in Abhängigkeit von der Anzahl der PCs in deinem Netzwerk bzw. pro Standort kannst du dir ein Problemchen einfangen:
Beim Booten verursachen Rechner Leistungsspitzen im Stromnetz - wenn du also sehr viele PCs und die alle gleichzeitig aus- und wieder angehen, könntest du dir damit die Sicherung(en) rausschiessen. Zumindest haben wir das bei uns in einer Laborumgebung schon mal hinbekommen.
Cheers,
jsysde
Ob das mal ne gute Idee ist...
Anyway, in Abhängigkeit von der Anzahl der PCs in deinem Netzwerk bzw. pro Standort kannst du dir ein Problemchen einfangen:
Beim Booten verursachen Rechner Leistungsspitzen im Stromnetz - wenn du also sehr viele PCs und die alle gleichzeitig aus- und wieder angehen, könntest du dir damit die Sicherung(en) rausschiessen. Zumindest haben wir das bei uns in einer Laborumgebung schon mal hinbekommen.
Cheers,
jsysde
Zitat von @Festus94:
Hallo,
danke für die schnelle Antwort. Kann ich da auch irgendiwe erreichen, dass erst der DC, dann die Terminalserver, dann ein
dritter Server, und dann die ganzen Workstations booten ?
tbnwadm
Hallo,
danke für die schnelle Antwort. Kann ich da auch irgendiwe erreichen, dass erst der DC, dann die Terminalserver, dann ein
dritter Server, und dann die ganzen Workstations booten ?
tbnwadm
Moin,
nenne doch mal bitte einen vernüftigen Grund, warum Du das willst
Danke & Gruß
24
läuft der DNS Server auf dem DC? Wenn ja sollte die als letztes rebootet werden. Ansonsten können evtl. die Namen nicht mehr aufgelöst werden. Es sei du verwendest die IP Adressen. Was aber auch wieder schlecht ist wenn Du die IPs per DHCP vergibst. Allerding weiss ich auch nicht warum du das machen willst?
Gruss
Micha
Gruss
Micha
Hallo,
Gruß
Markus
Daher auch der DC als Erster, dann die Terminalserver, usw. ;)
Wenn der DC als Erster booten muß(?), dann manuelle von Hand. Warten bis der wieder da ist, dann weiter machenDas Skript soll nur ablaufen, wenn ich es ausführe - was hoffentlich eine Seltenheit darstellt.
Dann würde ich keinen Aufwand treiben. Wie vorgeschlagen, die Listen anlegen und diese für shutdown /i nutzen (Cut & Paste).Gruß
Markus
Moin,
das ist nicht dein Ernst?
Der DNS läuft auf dem Router.
das ist nicht dein Ernst?
Zitat von @Festus94:
> Zitat von @60730:
> ----
> das ist nicht dein Ernst?
Doch, eigentlich schon, wieso ? Es funktioniert alles.
Viele Grüße
tbnwadm
> Zitat von @60730:
> ----
> das ist nicht dein Ernst?
Doch, eigentlich schon, wieso ? Es funktioniert alles.
Viele Grüße
tbnwadm
Das würde ich mal bezweifeln
VG
Hallo zusammen, ich habe zwar nicht alles gelesen, aber ich würde das so machen.
Script 1
' +++ Sucht alle Computer in der Domaene und speichert sie in einer Datei
' +++ dsquery computer <- findet alle Computer im Activ Directory
' +++ -limit 200 <-- Das Standart limit liegt bei 100 Einträgen.
' +++ da wir in der Domaene ca. 150 Rechner haben wird es mit
' +++ diesen Befehl auf 200 heraufgesetzt.
' +++ -o rdn <-- Nur der Computername wir ausgegeben
str_run = "dsquery computer -limit 200 -O rdn > Computer_in_Domaene.txt"
set wshell = CreateObject("WScript.Shell")
' +++ Startet eine DOS Box und führt dann dort den Eintrag in str_run aus.
' +++ /c fuert den Befehl/ befehle aus und endet dann.
wshell.Run "%ComSpec% /c " & str_run,,True
Set wshell = nothing
' +++ Aufruf des Dateihandlings um die Server aus der Liste zu entfernen
Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run ("Dateihandling.vbs")
Set wshell = Nothing
Sript 2
Hinweis: die Datei Server.txt wurde manuell erstellt, in ihr stehen die Namen der Server / Clients die nicht angefasst werden sollt
'+++ Variablen Deklaration
Dim objFs1, objFs2, objFs3 ' FileSystemObject Objekt
Dim strDateiname1, strDateiname2, strDateiname3
Dim strMaschines, strServer
Dim objTextStream1, objTextStream2, objTextStream3 ' Textstream Objekt
Dim strBoolean
' +++ FileSystemObjecte anlegen
Set objFs1 = CreateObject("Scripting.FileSystemObject")
Set objFs2 = CreateObject("Scripting.FileSystemObject")
Set objFs3 = CreateObject("Scripting.FileSystemObject")
'+++ Datei Pfade und Namen deklarieren
'+++ 1 fuer die Computer in der Domaene, 2 fuer die Serverliste
'+++ 3 ist fuer die Aufnahme der Workstations in der domaene
strDateiname1 = "Computer_in_Domaene.txt"
strDateiname2 = "Server.txt"
strDateiname3 = "Workstation.txt"
' +++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
' +++ objTextStream1 = Computer in Domaene
Set objTextStream1 = objFs1.OpenTextFile(strDateiname1,1)
'+++ Datei zur Aufnahme der Workstations erstellen
Set objTextStream3 = objFs3.CreateTextFile(strDateiname3, 8)
'+++Computerliste durchlaufen und kontrollieren ob es ein Server ist.
'+++ Wenn es kein server ist, dann in die Workstaton Datei eintragen
While Not objTextStream1.AtEndOfStream
strBoolean = False
strMaschines = objTextStream1.ReadLine
' +++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
' +++ objTextStream2 = Server
Set objTextStream2 = objFs2.OpenTextFile(strDateiname2,1)
While Not objTextStream2.AtEndOfStream
strServer = objTextStream2.ReadLine
If strMaschines = strServer Then
strBoolean = True
End if
Wend
'+++ Schliessen um ihn zu leeren
objTextStream2.Close
'+++ wenn es kein Server ist dann ab damit in die datei.
If strBoolean = False Then
'+++ Computer in Workstationliste eintragen
'+++ erst den text formatiern und die " entfernen.
'+++ dann den String mit einen Zeilenumbruch in Datei schreiben:
strMaschines = Replace(strMaschines, Chr(34), "")
objTextStream3.Write strMaschines & vbCrLf
End If
Wend
' +++ Textstream schliessen
objTextStream3.Close
objTextStream1.Close
' +++ Resourcen freigeben
Set objTextStream1 = Nothing
Set objTextStream2 = Nothing
Set objTextStream3 = Nothing
Set objFs1 = Nothing
Set objFs2 = Nothing
Set objFs3 = Nothing
' +++ Aufruf des Shutdon progs um alle Rechner die Online sind runter zu fahren.
Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run ("shutdown_online.vbs")
Set wshshell = nothing
Script 3:schaun welcher der Kisten an ist (pingen)
'+++ Variablen deklaration
Dim objFs1, objFs2 '+++ FileSystemObject Objekt
Dim strDateiname1, strDateiname2
Dim objTextStream1, strMaschines '+++ Textstream Objekt
Dim str_run '+++ Zur Aufnahme eines DOS Box Befehls
Dim i '+++ Zaehler zur Kontrolle ob ein Rechner Online ist.
i=0 '+++ Zaehler
'+++ Datei Pfade und Namen deklarieren
'+++ 1 = Die Rechner die online bzw aktive sind
'+++ 2 = Alle Workstations in der Domäne
strDateiname1 = "online.txt"
strDateiname2 = "Workstation.txt"
' +++ FileSystemObjecte anlegen
Set objFs1 = CreateObject("Scripting.FileSystemObject")
Set objFs2 = CreateObject("Scripting.FileSystemObject")
'+++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
'+++ 1 = Die Rechner die online sind
'+++ 2 = Alle Workstations in der Domäne
Set objLogFile = objFS1.CreateTextFile(strDateiname1,8)
Set objTextStream1 = objFs2.OpenTextFile(strDateiname2,1)
While Not objTextStream1.AtEndOfStream
strMaschines = objTextStream1.ReadLine
'+++ Pingen um heraus zu bekommen ob der Rechner online ist
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& strMaschines & "'")
'+++ Wenn der Rechner an ist, kommt er in die Online Datei
For Each objStatus in objPing
If objStatus.StatusCode=0 Then
objLogFile.Write(strMaschines & VbCrLf)
i=1 '+++ Merker, das mind. ein Rechner online ist.
End If
Next
Wend
'+++ Kontrolliert ob ueberhaupt ein Rechner online war.
'+++ Wenn nicht wird eine Bemerkung in die Datei geschrieben und alles Beendet.
if i=0 then
'+++ Durchlauf wenn kein Rechner Online war
'+++ Bemerkung in die Datei schreiben
objLogFile.Write("Keine Computer Online!" & VbCrLf)
'+++ Stream schliessen
objTextStream1.Close
objLogFile.Close
'+++ Dateihaendling
Set wshell = WScript.CreateObject("WScript.Shell")
'+++ Benennt die Online Dateim zur Doku um.
str_run = "ren online.txt online_%date%.txt"
'+++ Startet eine DOS Box und führt dann dort den Eintrag in str_run aus.
wshell.Run("%ComSpec% /c " & str_run)
'+++ Nicht mehr benoetigte Datei Loeschen
str_run = "del Computer_in_Domaene.txt"
wshell.Run("%ComSpec% /c " & str_run)
'+++ Nicht mehr benoetigte Datei Loeschen
str_run = "del Workstation.txt"
wshell.Run("%ComSpec% /c " & str_run)
'+++ Objekte freigeben
Set objFs1 = Nothing
Set objFs1 = Nothing
Set wshshell = Nothing
Else
'+++ Wird durchlaufen wenn mind. 1 Rechner online war.
'+++ Stream schliessen
objTextStream1.Close
objLogFile.Close
'+++ Objekte freigeben
Set objFs1 = Nothing
Set objFs1 = Nothing
'+++ Aufruf des shutdown Progs
Set wshShell = WScript.CreateObject ("WSCript.shell")
str_run ="C:\XXX\shutdown.bat"
wshShell.run ("%ComSpec% /c " & str_run)
Set wshShell = nothing
End if
Und nun die Bat Datei
Sleep5min.vbs
psshutdown @online.txt -c -m "Ihr PC wird von blablabla herruntergefahren. (Tel.xxxxxxx)" -t 1800 >> Doku.txt
Sleep5min.vbs
del Computer_in_Domaene.txt
del Workstation.txt
ren online.txt online_%date:~0,2%%date:~3,2%%date:~6,4%.txt
ren Doku.txt Doku_%date:~0,2%%date:~3,2%%date:~6,4%.txt
So fahre ich alle clients in der Domaäne herrunter, zum reeboot musst du nur den psshutdown eintrag anpassen.
Dann hasst du alles schön sauber Dokumentiert.
Durch die vielen Kommentare müste das ganze selbsterklärend sein.
Ss gibt bestimmt bessere Lösungen, aber so mach ich es halt.
Script 1
' +++ Sucht alle Computer in der Domaene und speichert sie in einer Datei
' +++ dsquery computer <- findet alle Computer im Activ Directory
' +++ -limit 200 <-- Das Standart limit liegt bei 100 Einträgen.
' +++ da wir in der Domaene ca. 150 Rechner haben wird es mit
' +++ diesen Befehl auf 200 heraufgesetzt.
' +++ -o rdn <-- Nur der Computername wir ausgegeben
str_run = "dsquery computer -limit 200 -O rdn > Computer_in_Domaene.txt"
set wshell = CreateObject("WScript.Shell")
' +++ Startet eine DOS Box und führt dann dort den Eintrag in str_run aus.
' +++ /c fuert den Befehl/ befehle aus und endet dann.
wshell.Run "%ComSpec% /c " & str_run,,True
Set wshell = nothing
' +++ Aufruf des Dateihandlings um die Server aus der Liste zu entfernen
Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run ("Dateihandling.vbs")
Set wshell = Nothing
Sript 2
Hinweis: die Datei Server.txt wurde manuell erstellt, in ihr stehen die Namen der Server / Clients die nicht angefasst werden sollt
'+++ Variablen Deklaration
Dim objFs1, objFs2, objFs3 ' FileSystemObject Objekt
Dim strDateiname1, strDateiname2, strDateiname3
Dim strMaschines, strServer
Dim objTextStream1, objTextStream2, objTextStream3 ' Textstream Objekt
Dim strBoolean
' +++ FileSystemObjecte anlegen
Set objFs1 = CreateObject("Scripting.FileSystemObject")
Set objFs2 = CreateObject("Scripting.FileSystemObject")
Set objFs3 = CreateObject("Scripting.FileSystemObject")
'+++ Datei Pfade und Namen deklarieren
'+++ 1 fuer die Computer in der Domaene, 2 fuer die Serverliste
'+++ 3 ist fuer die Aufnahme der Workstations in der domaene
strDateiname1 = "Computer_in_Domaene.txt"
strDateiname2 = "Server.txt"
strDateiname3 = "Workstation.txt"
' +++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
' +++ objTextStream1 = Computer in Domaene
Set objTextStream1 = objFs1.OpenTextFile(strDateiname1,1)
'+++ Datei zur Aufnahme der Workstations erstellen
Set objTextStream3 = objFs3.CreateTextFile(strDateiname3, 8)
'+++Computerliste durchlaufen und kontrollieren ob es ein Server ist.
'+++ Wenn es kein server ist, dann in die Workstaton Datei eintragen
While Not objTextStream1.AtEndOfStream
strBoolean = False
strMaschines = objTextStream1.ReadLine
' +++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
' +++ objTextStream2 = Server
Set objTextStream2 = objFs2.OpenTextFile(strDateiname2,1)
While Not objTextStream2.AtEndOfStream
strServer = objTextStream2.ReadLine
If strMaschines = strServer Then
strBoolean = True
End if
Wend
'+++ Schliessen um ihn zu leeren
objTextStream2.Close
'+++ wenn es kein Server ist dann ab damit in die datei.
If strBoolean = False Then
'+++ Computer in Workstationliste eintragen
'+++ erst den text formatiern und die " entfernen.
'+++ dann den String mit einen Zeilenumbruch in Datei schreiben:
strMaschines = Replace(strMaschines, Chr(34), "")
objTextStream3.Write strMaschines & vbCrLf
End If
Wend
' +++ Textstream schliessen
objTextStream3.Close
objTextStream1.Close
' +++ Resourcen freigeben
Set objTextStream1 = Nothing
Set objTextStream2 = Nothing
Set objTextStream3 = Nothing
Set objFs1 = Nothing
Set objFs2 = Nothing
Set objFs3 = Nothing
' +++ Aufruf des Shutdon progs um alle Rechner die Online sind runter zu fahren.
Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run ("shutdown_online.vbs")
Set wshshell = nothing
Script 3:schaun welcher der Kisten an ist (pingen)
'+++ Variablen deklaration
Dim objFs1, objFs2 '+++ FileSystemObject Objekt
Dim strDateiname1, strDateiname2
Dim objTextStream1, strMaschines '+++ Textstream Objekt
Dim str_run '+++ Zur Aufnahme eines DOS Box Befehls
Dim i '+++ Zaehler zur Kontrolle ob ein Rechner Online ist.
i=0 '+++ Zaehler
'+++ Datei Pfade und Namen deklarieren
'+++ 1 = Die Rechner die online bzw aktive sind
'+++ 2 = Alle Workstations in der Domäne
strDateiname1 = "online.txt"
strDateiname2 = "Workstation.txt"
' +++ FileSystemObjecte anlegen
Set objFs1 = CreateObject("Scripting.FileSystemObject")
Set objFs2 = CreateObject("Scripting.FileSystemObject")
'+++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
'+++ 1 = Die Rechner die online sind
'+++ 2 = Alle Workstations in der Domäne
Set objLogFile = objFS1.CreateTextFile(strDateiname1,8)
Set objTextStream1 = objFs2.OpenTextFile(strDateiname2,1)
While Not objTextStream1.AtEndOfStream
strMaschines = objTextStream1.ReadLine
'+++ Pingen um heraus zu bekommen ob der Rechner online ist
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& strMaschines & "'")
'+++ Wenn der Rechner an ist, kommt er in die Online Datei
For Each objStatus in objPing
If objStatus.StatusCode=0 Then
objLogFile.Write(strMaschines & VbCrLf)
i=1 '+++ Merker, das mind. ein Rechner online ist.
End If
Next
Wend
'+++ Kontrolliert ob ueberhaupt ein Rechner online war.
'+++ Wenn nicht wird eine Bemerkung in die Datei geschrieben und alles Beendet.
if i=0 then
'+++ Durchlauf wenn kein Rechner Online war
'+++ Bemerkung in die Datei schreiben
objLogFile.Write("Keine Computer Online!" & VbCrLf)
'+++ Stream schliessen
objTextStream1.Close
objLogFile.Close
'+++ Dateihaendling
Set wshell = WScript.CreateObject("WScript.Shell")
'+++ Benennt die Online Dateim zur Doku um.
str_run = "ren online.txt online_%date%.txt"
'+++ Startet eine DOS Box und führt dann dort den Eintrag in str_run aus.
wshell.Run("%ComSpec% /c " & str_run)
'+++ Nicht mehr benoetigte Datei Loeschen
str_run = "del Computer_in_Domaene.txt"
wshell.Run("%ComSpec% /c " & str_run)
'+++ Nicht mehr benoetigte Datei Loeschen
str_run = "del Workstation.txt"
wshell.Run("%ComSpec% /c " & str_run)
'+++ Objekte freigeben
Set objFs1 = Nothing
Set objFs1 = Nothing
Set wshshell = Nothing
Else
'+++ Wird durchlaufen wenn mind. 1 Rechner online war.
'+++ Stream schliessen
objTextStream1.Close
objLogFile.Close
'+++ Objekte freigeben
Set objFs1 = Nothing
Set objFs1 = Nothing
'+++ Aufruf des shutdown Progs
Set wshShell = WScript.CreateObject ("WSCript.shell")
str_run ="C:\XXX\shutdown.bat"
wshShell.run ("%ComSpec% /c " & str_run)
Set wshShell = nothing
End if
Und nun die Bat Datei
Sleep5min.vbs
psshutdown @online.txt -c -m "Ihr PC wird von blablabla herruntergefahren. (Tel.xxxxxxx)" -t 1800 >> Doku.txt
Sleep5min.vbs
del Computer_in_Domaene.txt
del Workstation.txt
ren online.txt online_%date:~0,2%%date:~3,2%%date:~6,4%.txt
ren Doku.txt Doku_%date:~0,2%%date:~3,2%%date:~6,4%.txt
So fahre ich alle clients in der Domaäne herrunter, zum reeboot musst du nur den psshutdown eintrag anpassen.
Dann hasst du alles schön sauber Dokumentiert.
Durch die vielen Kommentare müste das ganze selbsterklärend sein.
Ss gibt bestimmt bessere Lösungen, aber so mach ich es halt.