ohnepower
Goto Top

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 face-smile

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

Content-Key: 73155

Url: https://administrator.de/contentid/73155

Printed on: April 20, 2024 at 02:04 o'clock

Member: OhnePower
OhnePower Nov 09, 2007 at 17:17:47 (UTC)
Goto Top
Hey...

das ist schon nicht schlecht...

Nur wie baue ich das ganze zusammen??
Member: bastla
bastla Nov 09, 2007 at 20:42:45 (UTC)
Goto Top
Hallo OhnePower!

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
Member: OhnePower
OhnePower Nov 10, 2007 at 12:31:01 (UTC)
Goto Top
Hey bastla...

wow...
Vielen Dank erstmal!!!


Gruß Maik