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