http://dieseyer.de • all rights reserved • © 2011 v11.4
'v4.7***************************************************
' File: pc-ein-test.vbs
' Autor: dieseyer@gmx.de
' dieseyer.de
'
' Das Script prüft alle 60s per PING, ob ein PC einge-
' schaltet ist. Der Test beendet sich selbst, wenn die
' .run - Datei gelöscht wird.
'*******************************************************
Option Explicit
Dim PC, Txt, Text, i, Intervall, LogDatei, VBSrun, NetSend
Dim WSHShell, WSHNet, fso
Dim Prog_PP, FSO_PP, FileOut_PP, VBSDatei_PP
Set Prog_PP = nothing
Set WSHNet = WScript.CreateObject("WScript.Network")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Intervall = 10
Intervall = 20
PC = "MeinPC"
PC = wshnet.ComputerName
PC = InputBox( "Welcher PC soll auf Anwesenheit überprüft werden?", WScript.ScriptName, PC )
PC = UCase( PC )
If Len( PC ) < 3 then
PC = InputBox( "Welcher PC soll auf Anwesenheit überprüft werden?", WScript.ScriptName, PC )
PC = UCase( PC )
If Len( PC ) < 3 then WScript.Quit
End If
NetSend = "Bitte rufen Sie 0172/74620xx an und verlangen Sie einen Service-Techniker."
LogDatei = PC & " " & WScript.ScriptName & ".log"
VBSrun = PC & " " & WScript.ScriptName & ".run"
fso.OpenTextFile(LogDatei, 8, true).WriteLine ( now() )
fso.OpenTextFile(VBSrun , 8, true).WriteLine ( now() )
Do
Txt = ExecHiddenPlus ( "%comspec% /c Ping " & PC & " -n 1" ) ' PING absetzen
Txt = Split(Txt, vbCrLf ) ' alles von PING gelesene in Zeilen aufteilen
Text = ""
for i = 0 to ubound(Txt) ' jede Zeile überprüfen
if InStr(Txt(i), "TTL=") > 1 then Text = Txt(i)
next
fso.OpenTextFile(LogDatei, 8, true).WriteLine ( Text & vbTab & PC & vbTab & now() )
' LOG schreiben
If InStr( UCase( Text ), "TTL" ) then ' enthält PING-Ausgabe TTL?
Text = MsgBox( now() & vbCRLF & PC & " reagiert auf PING mit:" & vbCRLF & vbCRLF & Text, 5+4096, WScript.ScriptName )
If Text = vbCancel Then Exit Do
End If
If not fso.FileExists( VBSrun ) then ' wurde .run - Datei gelöscht?
Text = MsgBox( now() & vbCRLF & PC & vbCRLF & vbCRLF & "Nicht erreichbar - Test abgebrochen.", 5+4096, WScript.ScriptName )
If Text = vbCancel Then WScript.Quit
fso.OpenTextFile(VBSrun , 8, true).WriteLine ( now() )
End If
If not Text = vbRetry Then WScript.Sleep 1000 * Intervall ' ..Sekunden warten
If not fso.FileExists( VBSrun ) then ' wurde .run - Datei gelöscht?
Text = MsgBox( now() & vbCRLF & PC & vbCRLF & vbCRLF & "Nicht erreichbar - Test abgebrochen.", 5+4096, WScript.ScriptName )
If Text = vbCancel Then WScript.Quit
fso.OpenTextFile(VBSrun , 8, true).WriteLine ( now() )
End If
Loop
NetSend = InputBox( "Eine Nachricht an " & PC & " senden?", WScript.ScriptName & vbTab & PC, NetSend )
NetSend = " " & NetSend ' ein Leerzeichen einfügen
If not NetSend = "" Then
WSHShell.Run "net send " & PC & NetSend
fso.OpenTextFile(LogDatei, 8, true).WriteLine ( "net send " & PC & NetSend & vbTab & now() )
' LOG schreiben
Else
wshshell.Popup "net send " & PC & NetSend & vbCRLF & ". . . wurde nicht abgesetzt." , 12, WScript.ScriptName
fso.OpenTextFile(LogDatei, 8, true).WriteLine ( "KEIN net send " & PC & NetSend & vbTab & now() )
End If
If fso.FileExists( VBSrun ) Then fso.DeleteFile( VBSrun )
wshshell.Popup "Ende" , 5, WScript.ScriptName
WScript.Quit
'**************************************************************
Function ExecHiddenPlus ( CMD ) ' v3.A - http://dieseyer.de
'**************************************************************
Dim FileOut, oWsh, Tmp
Tmp = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%") & "\" & PC & "-ExecHiddenPlus.VBS"
If not WScript.CreateObject("Scripting.FileSystemObject").FileExists( Tmp ) Then
' zum Test nächste Zeile frei geben
' MsgBox Tmp & vbCRLF & "F E H L T"
Set FileOut = WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile( Tmp , 8, true)
FileOut.WriteLine( " set oArgs = Wscript.Arguments " )
FileOut.WriteLine( " For i = 0 to oArgs.Count - 1 " )
' zum Test nächste Zeile frei geben
' FileOut.WriteLine( " MsgBox oArgs.item(i) , , WScript.ScriptName & "" - oArgs "" " )
FileOut.WriteLine( " if Instr( oArgs.item(i), "" "" ) > 0 Then CMD = CMD & """""""" & oArgs.item(i) & """""""" & "" "" " )
FileOut.WriteLine( " if not Instr( oArgs.item(i), "" "" ) > 0 Then CMD = CMD & oArgs.item(i) & "" "" " )
FileOut.WriteLine( " Next " )
' zum Test nächste Zeile frei geben
' FileOut.WriteLine( " MsgBox CMD , , WScript.ScriptName & "" Anfang "" " )
FileOut.WriteLine( " Set oExec = WScript.CreateObject(""WScript.Shell"").Exec( CMD ) " )
FileOut.WriteLine( " Do Until oExec.status : WScript.Sleep 100 : Loop " )
FileOut.WriteLine( " WScript.CreateObject(""WScript.Shell"").Environment( ""volatile"" )( ""Eregbnis"" ) = oExec.StdOut.ReadAll() " )
' zum Test nächste Zeile frei geben
' FileOut.WriteLine( " MsgBox WScript.CreateObject(""WScript.Shell"").Environment( ""volatile"" )( ""Eregbnis"" ), , WScript.ScriptName & "" Ende "" " )
FileOut.Close
Set FileOuT = nothing
End If
Set oWsh = WScript.CreateObject("WScript.Shell")
oWsh.Run "CScript.exe //NOLOGO " & Tmp & " " & CMD , 0, true
ExecHiddenPlus = oWsh.Environment("volatile")( "Eregbnis" )
' zum Test nächste Zeile frei geben - Löschen der 'Tmp-Datei
WScript.CreateObject("Scripting.FileSystemObject").DeleteFile( Tmp )
End Function ' ExecHiddenPlus ( CMD ) ' v3.A - http://dieseyer.de
'**************************************************************
http://dieseyer.de • all rights reserved • © 2011 v11.4