deboe1986
Goto Top

Welche Rechner sind nachts eingeschaltet

Hallo zusammen,

wir wollen überprüfen, welche Rechner nachts eingeschaltet sind.
Wie könnte man das grundsätzlich abfragen?

Hab da an ein Script gedacht, dass nacht an verschiedenen Uhrzeiten die Rechner
pingt und diese (wenn sie an sind) zurückgibt in einer log-Datei...
Wäre so etwas in der Richtung möglich?

Für jede Hilfe und Anregung wäre ich dankbar!

Grüße,
DB

Content-ID: 123602

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

Ausgedruckt am: 19.11.2024 um 03:11 Uhr

brammer
brammer 27.08.2009 um 10:47:24 Uhr
Goto Top
Hallo,

einfach nachts mit einem Tool wie "netscan" das Netzwerk einmal durch pingen (mit Namensauflösung) und schon hast du eine Rückmeldung.

brammer
hajowe
hajowe 27.08.2009 um 11:05:56 Uhr
Goto Top
Hallo,

Ein Ping wird da nicht reichen.
Es gibt Netzwerkkarten die Remote per Netz duch die Netzkarte hochgefahren werden.
Ich kann mir vorstellen das da die unter Saft stehen auch auf einen Ping reagieren.
Deboe1986
Deboe1986 27.08.2009 um 11:49:02 Uhr
Goto Top
Hallo,

wollen ein Script per Schedule Task üebr Landesk nachts ausführen.
Habe im Internet dieses Script gefunden:

strComputer = "." ' Local computer  

set objWMIDateTime = CreateObject("WbemScripting.SWbemDateTime")  
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
set colOS = objWMI.InstancesOf("Win32_OperatingSystem")  
for each objOS in colOS
	objWMIDateTime.Value = objOS.LastBootUpTime
	Wscript.Echo "Last Boot Up Time: " & objWMIDateTime.GetVarDate & vbcrlf & _  
		"System Up Time: " &  TimeSpan(objWMIDateTime.GetVarDate,Now) & _  
		" (hh:mm:ss)"  
next

Function TimeSpan(dt1, dt2) 
	' Function to display the difference between  
	' 2 dates in hh:mm:ss format  
	If (isDate(dt1) And IsDate(dt2)) = false Then 
		TimeSpan = "00:00:00"   
		Exit Function 
        End If 
 
        seconds = Abs(DateDiff("S", dt1, dt2))   
        minutes = seconds \ 60 
        hours = minutes \ 60 
        minutes = minutes mod 60 
        seconds = seconds mod 60 
 
        if len(hours) = 1 then hours = "0" & hours   
 
        TimeSpan = hours & ":" & _   
            RIGHT("00" & minutes, 2) & ":" & _   
            RIGHT("00" & seconds, 2)   
End Function 

Nun sollen die Ergebnisse (+Rechnername und Anmeldename) in einer Log-Datei auf dem Netzlaufwerk X:\ im Ordner "_TEMP" gespeichert werden... Wie bastel ich das nun zusammen? Kann mir da evlt. einer helfen? Vielen Dank schonmal!
81825
81825 27.08.2009 um 11:58:05 Uhr
Goto Top
Auf die Problematik, dass ein Zugriff auf einen Rechner im heruntergefahrenen Zustand den Rechner wieder aufwecken könnte, wurdest du ja bereits aufmerksam gemacht.
Also wäre es zunächst mal erforderlich, dies zu verhindern.

Wenn es reicht, die Rechner, die eingeschaltet sind, einfach runterzufahren, könntest du psshutdown mit einer Liste der möglichen Rechnernamen benutzen, um sie herunterzufahren.
Deboe1986
Deboe1986 27.08.2009 um 13:15:35 Uhr
Goto Top
Hi greypeter, danke noch einmal für die Antworten.

Damit kein Rechner aufgeweckt wird, wollen wir dieses Script mit Landesk (Agent ist auf jedem System installiert) verteilen und ausführen. Landesk spricht lediglich die Rechner an, die auch online sind - alle anderen springen in "Failed" - Status: "Off" - Cannot Find Agent.

Um das herunterfahren geht es vorerst mal nicht, in erster Linie geht es darum festzustellen, wieviele Rechner an sind (und dann zu schauen, welche davon on sein müssen und welche nicht). Deshalb auch das Script mit der Log-Datei.
81825
81825 27.08.2009 um 13:34:32 Uhr
Goto Top
Um festzustellen, ob ein Rechner online ist, muss er doch erst mal angesprochen werden. Und durch dieses Ansprechen wird er doch möglicherweise aufgeweckt.
Oder übersehe ich da etwas? Die Arbeitsweise bzw. Funktionalität von LanDesk ist mir nicht bekannt.

Wenn das so klappen sollte, wie du dir das vorstellst, ist es ja ok. face-wink
Deboe1986
Deboe1986 27.08.2009 um 14:49:27 Uhr
Goto Top
Klar wäre es möglich sie aufzuwecken, aber das muss extra in der Task angegeben werden. Tut man das nicht, sollte auch nichts passieren. Desweiteren funktioniert das wake-up ja nur, wenn eine bestimmte byte-sequenz in den gesendeten Paketen ist - diese hat ping normal nicht. Aber erst brauch ich mal das fertige Script, dann kann alles getestet werden face-wink.
81825
81825 27.08.2009 um 15:06:34 Uhr
Goto Top
Desweiteren funktioniert das wake-up ja nur, wenn eine bestimmte byte-sequenz in den gesendeten Paketen ist - diese hat ping
normal nicht.

Was ist "normal?" face-smile Das WakeUp funktioniert so, wie das im Rechnerbios (und/oder in den Einstellungen der Netzwerkkarte) konfiguriert ist.
Die "bestimmte Byte-Sequenz" ist nur eine der Möglichkeiten.
Deboe1986
Deboe1986 27.08.2009 um 15:49:24 Uhr
Goto Top
Hab nun ein bisschen was zusammengeschustert.. Funktioniert 1a - auch wenn der Code bestimmt sauschlecht zu lesen ist für einen Fortgeschrittenen User face-wink

Const ForReading = 1, ForWriting = 2, ForAppending = 8
strLogFile = "X:\_Temp\Powermanagement.log"  
Dim objNetwork

strComputer = "." ' Local computer  

Set objPC = CreateObject( "Shell.LocalMachine" )  
strComputerName = objPC.MachineName
Set objNetwork = CreateObject("WScript.Network")  

set objWMIDateTime = CreateObject("WbemScripting.SWbemDateTime")  
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
set colOS = objWMI.InstancesOf("Win32_OperatingSystem")  
for each objOS in colOS
	objWMIDateTime.Value = objOS.LastBootUpTime

next
Function TimeSpan(dt1, dt2) 
	' Function to display the difference between  
	' 2 dates in hh:mm:ss format  
	If (isDate(dt1) And IsDate(dt2)) = false Then 
		TimeSpan = "00:00:00"   
		Exit Function 
        End If 
 
        seconds = Abs(DateDiff("S", dt1, dt2))   
        minutes = seconds \ 60 
        hours = minutes \ 60 
        minutes = minutes mod 60 
        seconds = seconds mod 60 
 
        if len(hours) = 1 then hours = "0" & hours   
 
        TimeSpan = hours & ":" & _   
            RIGHT("00" & minutes, 2) & ":" & _   
            RIGHT("00" & seconds, 2)   
End Function 

Set fso = CreateObject("Scripting.FileSystemObject")  
Set OutputFile    = fso.OpenTextFile(strLogFile, 8, True,0)
    OutputFile.WriteLine  Now & " PCNAME: " & strComputerName & " USERNAME: " & objNetwork.UserName & " BOOT: " & objWMIDateTime.GetVarDate & " UPTIME: " & TimeSpan(objWMIDateTime.GetVarDate,Now)  

Ausgabe (X:\_TEMP\Powermanagement.log):
27.08.2009 15:48:28 PCNAME: DEWSAWIS095 USERNAME: boerschd BOOT: 27.08.2009 07:55:52 UPTIME: 07:52:36

MfG
DB