Clients dynamisch herunterfahren
Hallo...
bei uns läuft ein Windows 2003 SBS und einige XP Clients.
Zum Feierabend soll der Server bestimmte Clients automatisch herunterfahren... das hört sich noch nicht allzu heftig an...
Aber: Das Script soll aus dem AD eine Computer OU auslesen, prüfen ob die Rechner online sind, gegebenenfalls herunterfahren und alles protokollieren
Da ich ein absoluter Neuling in Sachen Scripting bin, bitte ich hier um Hilfe!!
Struktur:
1. OU im AD ansprechen
2. Computerobjekte auf online prüfen - falls zutreffend herunterfahren
3. Protokoll mit Datum und Zeit
Ich hoffe es kann jemand helfen!
VG Maik
bei uns läuft ein Windows 2003 SBS und einige XP Clients.
Zum Feierabend soll der Server bestimmte Clients automatisch herunterfahren... das hört sich noch nicht allzu heftig an...
Aber: Das Script soll aus dem AD eine Computer OU auslesen, prüfen ob die Rechner online sind, gegebenenfalls herunterfahren und alles protokollieren
Da ich ein absoluter Neuling in Sachen Scripting bin, bitte ich hier um Hilfe!!
Struktur:
1. OU im AD ansprechen
2. Computerobjekte auf online prüfen - falls zutreffend herunterfahren
3. Protokoll mit Datum und Zeit
Ich hoffe es kann jemand helfen!
VG Maik
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73155
Url: https://administrator.de/contentid/73155
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo OhnePower!
Ein paar Links, die Dir helfen könnten:
Grüße
bastla
Ein paar Links, die Dir helfen könnten:
Grüße
bastla
Hallo OhnePower!
Das könnte schematisch so aussehen:
Grüße
bastla
Das könnte schematisch so aussehen:
Const strLogFile = "D:\ShutDownLogs.txt"
Const ForAppending = 8
Set fso = CreateObject("Scripting.FileSystemObject")
'Protokolldatei öffnen, Daten werden an bestehende Datei angefügt
Set objLogFile = fso.OpenTextFile(strLogFile, ForAppending, True)
Set colItems = GetObject _
("LDAP://ou=Servers, dc=fabrikam, dc=com")
colItems.Filter = Array("Computer") 'nur Computer-Objekte der OU
For Each objItem in colItems 'objItem ist jeder einzelne gefundene Computer
strCompName = objItem.CN 'Namen des Computers speichern
'Timestamp (Datum und Zeit getrennt) ermiteln
strTime = CStr(Time) 'Zeit als Text speichern
dtDate = Date 'Datum zwischenspeichern, ...
'... als JJJJ-MM-TT formatieren und als Text speichern
strDate = Year(dtDate) & "-" &_
Right("0" & CStr(Month(dtDate)), 2) & "-" & _
Right("0" & CStr(Day(dtDate)), 2)
If IsOnline(strCompName) Then 'auf Erreichbarkeit prüfen
Shutdown strCompName 'Computer herunterfahren
'Logeintrag erstellen
strLogEntry = strDate & vbTab & strTime & vbTab & strCompName & vbTab & " wurde heruntergefahren."
Else
'Logeintrag erstellen
strLogEntry = strDate & vbTab & strTime & vbTab & strCompName & vbTab & " war offline/ausgeschaltet."
End If
'Logeintrag schreiben
objLogFile.WriteLine strLogEntry
Next
objLogFile.Close 'Protokolldatei schließen
'.................... Ende Hauptprogramm ....................
Function IsOnline(strComp)
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strComp) 'CMD-Ping verwenden
strPingResults = LCase(objExec.StdOut.ReadAll) 'gesamte Ping-Ausgabe (in Kleinbuchstaben) speichern ...
On Error Goto 0
If InStr(strPingResults, "antwort von") Then '... und überprüfen
IsOnline = True
Else
IsOnline = False
End If
End Function
Sub Shutdown(strComputer)
Const SHUTDOWN = 1
Set objWMIService = GetObject _
("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\" & _
strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Win32Shutdown(SHUTDOWN)
Next
End Sub
Grüße
bastla