Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PCs in einer Domäne Abends gezielt runter fahren

Frage Entwicklung Batch & Shell

Mitglied: 103148

103148 (Level 1)

22.03.2013, aktualisiert 07:45 Uhr, 3258 Aufrufe, 16 Kommentare, 4 Danke

Hallo,

ich habe schon etwas gesucht, aber nict so richtig was gefunden.

In einer w2k8 Domäne habe ich ca. 200 PC´s XP und W7.
Alle mit dem Namen FirmaCxxx, C steht für Client und xxx der Zähler von 001 - 500, aktiv sind ca. 200 PC´s.

Diese möchte ich gerne mit einem kleinen Tool gegen 21:00Uhr prüfen und wenn dieser an ist mit einer Meldung runter fahren.

Den shutdown Befehl kenne ich aber ich kann ihn nich in eine "Schleife" binden.

Es gibt dann noch paar PC´s die dürfen nicht runter gefahren werden zb FirmaC360 und FirmaC361.

Gruß
Mitglied: Penny.Cilin
22.03.2013 um 07:37 Uhr
Hallo,

ich würde die Clients in eine Text-Datei ablegen und dieses mittel der For-Schleife dann auslesen und runterfahren.
Somit schließt Du die Clients aus, welche nicht runtergefahren werden sollen.

Es gibt hier einige Threads bzgl. auslesen einer Text-Datei mit anschließender Aktion.

Wie Du schon geschrieben hast, hast Du Dir den Shutdown-Befehl schon angeschaut.


Gruß Penny
Bitte warten ..
Mitglied: Casa85
22.03.2013 um 07:39 Uhr
Ist dies nicht per GPO möglich?

Computerkonfiguration->Systemsteuerungseinstellungen->Geplante Aufgaben?

Gruß
Bitte warten ..
Mitglied: hmarkus
22.03.2013 um 08:03 Uhr
Guten Morgen zusammen,
Zitat von Casa85:
Ist dies nicht per GPO möglich?

Computerkonfiguration->Systemsteuerungseinstellungen->Geplante Aufgaben?

Gruß
selbst wenn das geht, dann ist das zu unflexibel. Alle PCs die nicht herunter gefahren werden sollen (auch kurzfristig) müssten in eine eigene OU. Das ist so nicht umsetzbar.

Ich würde das mit einer Batch-Datei, aber ohne for-Schleife machen. einfach für jeden Client eine Zeile anlegen
shutdown -s -f -m \\FirmaC001 -C "Feierabend, ab nach Hause!" -t 60 
shutdown -s -f -m \\FirmaC002 -C "Feierabend, ab nach Hause!" -t 60 
... usw.
Der Vorteil ist, wenn ein Kollege zu Dir sagt, "ich muss die kommende Nacht durcharbeiten", dann brauchst Du dessen PC nur in der Batch-Datei auszukommentieren.

Markus
Bitte warten ..
Mitglied: mkuchen
22.03.2013 um 09:15 Uhr
Zitat von hmarkus:
Guten Morgen zusammen,
> Zitat von Casa85:
> ----
> Ist dies nicht per GPO möglich?
>
> Computerkonfiguration->Systemsteuerungseinstellungen->Geplante Aufgaben?
>
> Gruß
selbst wenn das geht, dann ist das zu unflexibel. Alle PCs die nicht herunter gefahren werden sollen (auch kurzfristig)
müssten in eine eigene OU. Das ist so nicht umsetzbar.

Natürlich ist es das!

Ich würde das mit einer Batch-Datei, aber ohne for-Schleife machen. einfach für jeden Client eine Zeile anlegen
shutdown -s -f -m \\FirmaC001 -C "Feierabend, ab nach Hause!" -t 60 
> shutdown -s -f -m \\FirmaC002 -C "Feierabend, ab nach Hause!" -t 60 
> ... usw.
Der Vorteil ist, wenn ein Kollege zu Dir sagt, "ich muss die kommende Nacht durcharbeiten", dann
brauchst Du dessen PC nur in der Batch-Datei auszukommentieren.


Wozu 200 Zeilen Code schreiben?

Man muss nicht über Peking nach Rom. Die GPOs sind da schon völlig ausreichend.
Bitte warten ..
Mitglied: hmarkus
22.03.2013, aktualisiert um 09:22 Uhr
Zitat von mkuchen:
...
Wozu 200 Zeilen Code schreiben?

Man muss nicht über Peking nach Rom. Die GPOs sind da schon völlig ausreichend.
Wenn man das mit dem Windowseditor macht, dann hat man ein Problem. So eine Batch-Datei legt man einmal in Excel an und bearbeitet sie weiter in einem richtigen Editor.

mkuchen, wenn Du meinst, dass das per GPO zu lösen ist (und zwar flexibel), dann beschreib mal bitte das genaue Vorgehen, das interessiert mich nämlich.

Markus
Bitte warten ..
Mitglied: DerWoWusste
22.03.2013 um 10:21 Uhr
Moin.
@hmarkus
Alle PCs die nicht herunter gefahren werden sollen (auch kurzfristig) müssten in eine eigene OU. Das ist so nicht umsetzbar
Wie kommst Du denn darauf? Noch nie was von Sicherheitsfilterung gehört?

Einen Task zu verteilen ist eine einfache, gute Lösung, da somit Probleme mit der Konnektivität ausgeschlossen werden.
Bitte warten ..
Mitglied: hmarkus
22.03.2013 um 10:29 Uhr
Zitat von DerWoWusste:
...
@hmarkus
...
Wie kommst Du denn darauf? Noch nie was von Sicherheitsfilterung gehört?
Nö, meine Kenntnisse enden z.Zt. bei Server 2003, und dort habe ich sowas nicht vorgefunden

Einen Task zu verteilen ist eine einfache, gute Lösung, da somit Probleme mit der Konnektivität ausgeschlossen werden.
Mich würde nun interessieren, ob das auch kurzfristig wirkt (mit der Sicherheitsfilterung). Also Beispiel, ein Kollege lässt einen Prozess auf seinem Rechner über Nacht durchlaufen und sagt dem Admin kurz vor Feierabend bescheid. Kann man dann auf diese Weise den einzelnen Rechner vom Shutdown ausschließen? Ich kenne Gruppenrichtlinien ja nur so, dass sie nach dem soundosvielten Neustart greifen..... und das wäre in meinem Beispiel ja eher hinderlich

Markus
Bitte warten ..
Mitglied: DerWoWusste
22.03.2013 um 10:37 Uhr
Sicherheitsfilterung ging schon mit Win2k - einfach mal belesen. Task Deployment über GPPs geht ab xp. Die Tasks werden per Background refresh eingetragen, kein Neustart erforderlich.
Bitte warten ..
Mitglied: hmarkus
22.03.2013 um 10:40 Uhr
Zitat von DerWoWusste:
Sicherheitsfilterung ging schon mit Win2k - einfach mal belesen. Task Deployment über GPPs geht ab xp. Die Tasks werden per
Background refresh eingetragen, kein Neustart erforderlich.
Ok, danke, das werde ich mir ansehen wenn ich es mal brauche.

Markus
Bitte warten ..
Mitglied: StyX82
22.03.2013 um 11:08 Uhr
Hallo,

du kannst das eigentlich gut mit einer geplanten Aufgabe per GPO machen.
Das einzige was du zusätzlich machen müsstest, wäre einen WMI-Filter erstellen, wo du die besagten paar PCs ausschliesst.

In etwa so: SELECT * FROM Win32_ComputerSystem WHERE Name != 'NAME'

Gruß

StyX-
Bitte warten ..
Mitglied: DerWoWusste
22.03.2013 um 11:15 Uhr
Hallo Styx.

GPPs haben zusammenklickbare WMI-Filter ("Item level targeting"), das wird also ein Klacks sein.
Bitte warten ..
Mitglied: 103148
22.03.2013 um 15:13 Uhr
cool, sehr nette Ansätze!

Das Verteilen per GPO gefällt mir etwas besser bzw eleganter.
Obwol ich Batches liebe....

Also einfach den Shutdown Befehl als Batch und dann per GPO als geplante Aufgabe verteilen.

unter Ausschluss der Liste mit den Rechnern die nicht runter gefahren werden dürfen.
Da läuft auf paar XP Dosen kleine Tools, gehört für mich eher auf ein Server... aber egal


Jetzt habe ich ein kleines Problem mit den WMI Filter... @DerWoWusste, kannst du mir das etwas näher erklären?

Gruß
Bitte warten ..
Mitglied: DerWoWusste
22.03.2013, aktualisiert um 15:45 Uhr
Da läuft auf paar XP Dosen kleine Tools, gehört für mich eher auf ein Server
Wovon sprichst Du? Da laufen keine Tools sondern Tasks, die einfach den shutdown-Befehl starten.
WMI-Filter siehe http://technet.microsoft.com/en-us/library/cc733022.aspx oder als Bild b5c039362ccd3a3d62961c444433d0dd - Klicke auf das Bild, um es zu vergrößern bzw. ff4f11fa75922aee5139d9da3df9bf23 - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: win-dozer
22.03.2013 um 19:31 Uhr
Hallo,

wie wärs wenn du Aufgaben anlegst um z.B. 08:30, den Shutdowntimer auf eine halbe Stunden und wenn der Anwender "durcharbeitet" kann er eine shutdown -a Batch ausführen die auf dem Desktop liegt?

Gruß

win-dozer
Bitte warten ..
Mitglied: format-c
23.03.2013 um 02:09 Uhr
Zitat von 103148:
Den shutdown Befehl kenne ich aber ich kann ihn nich in eine "Schleife" binden.

Auch wenn die Lösung mittels GPO eine bessere sein mag, und nur, um deine Frage direkt zu beantowrten, wäre eine folgende Umsetzung denkbar:
01.
for /f %%i in ('net view ^| find /I "FirmaC" ^| findstr /V /G:C:\TEMP\ausschlussliste.txt') do shutdown -m %%i -s -t 600 -c "Dieser Rechner wird demnächst heruntergefahren. Zum Abbrechen starten Sie doNotShutdown.bat auf dem Desktop."
Was mich an der ganzen Geschichte am meisten stört, ist dass der Countdown vor dem Herunterfahren ab Windows Vista aufwärts nicht mehr angezeit wird, und der Anwender somit nicht weiß, wieviel Zeit ihm noch bleibt: 90 Minuten oder 9 Sekunden. Schön ist so eine Lösung dann nicht mehr.


Gruß
format-c
Bitte warten ..
Mitglied: Scanner
25.03.2013 um 15:45 Uhr
Benutz doch die "psshutdown.exe" und machs so. Die Domäne auslesen was für Computer vorhanden sind.
die Computer die nicht runtergefahren sollen aus der Liste entfernen und dann die Computer nach einer bestimmten Wartezeit herunter fahren. in meinem Beispiel bleiben die Server oben und die Workstations fahren herunter.

hier mal der Code dazu
Startdatei -> SearchComputer

' +++ 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.
' +++ -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 (rechner die nicht heruntergefahren werden sollen) aus der Liste zu entfernen
Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run ("Dateihandling.vbs")


Dateihandling <-(sortieren der Rechner)


'+++ 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


shutdown_online <- schaun welcher Rechner online ist und ihn dann auf die Liste zum herunterfahren schreiben.

'+++ 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:\SHUTDOWN_DOM\shutdown.bat"
wshShell.run ("%ComSpec% /c " & str_run)

Set wshShell = nothing

End if



shutdown <- die Datei die das eigentliche shutdown ausführt.

psshutdown @online.txt -c -m "Ihr PC wird vom blablabla herruntergefahren. " -t 1800 >> Doku.txt
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Netzwerk
gelöst Mehrere Windows PCs gleichzeitig zur Domäne (4)

Frage von PharIT zum Thema Windows Netzwerk ...

Windows Server
gelöst Auf einem Hyper-v Host Fahren die VMs von selber runter (8)

Frage von snajman zum Thema Windows Server ...

Windows Netzwerk
USB-Gerät ins Netzwerk (Domäne) einbinden (4)

Frage von griss0r zum Thema Windows Netzwerk ...

Windows Server
AD Replikation zwischen untergeordneten Domäne zwingend? (1)

Frage von Gien-app zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...