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-Key: 123602

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

Printed on: April 26, 2024 at 14:04 o'clock

Member: brammer
brammer Aug 27, 2009 at 08:47:24 (UTC)
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
Member: hajowe
hajowe Aug 27, 2009 at 09:05:56 (UTC)
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.
Member: Deboe1986
Deboe1986 Aug 27, 2009 at 09:49:02 (UTC)
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!
Mitglied: 81825
81825 Aug 27, 2009 at 09:58:05 (UTC)
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.
Member: Deboe1986
Deboe1986 Aug 27, 2009 at 11:15:35 (UTC)
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.
Mitglied: 81825
81825 Aug 27, 2009 at 11:34:32 (UTC)
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
Member: Deboe1986
Deboe1986 Aug 27, 2009 at 12:49:27 (UTC)
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.
Mitglied: 81825
81825 Aug 27, 2009 at 13:06:34 (UTC)
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.
Member: Deboe1986
Deboe1986 Aug 27, 2009 at 13:49:24 (UTC)
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