VB Script zur Statusabfrage eines hochfahrenden PCs
Grundsätzliches:
Mein Vater möchte von zu Hause per VPN und Remote Desktop auf seinen PC in der Firma zugreifen. Dieses habe ich mit einem VB Script realisiert.
Der PC zuhause und in der Firma haben Windows XP Prof. mit SP3 installiert.
Was bereits funktioniert:
Das Script stellt automatisch die VPN Verbindung her,fährt den PC in der Firma per Wake on Lan hoch und startet dann automatisch Remote Desktop.
Er kann sich dann anmelden und später trennt das Script die Verbindung und fährt auch vorher auf Wunsch den PC in der Firma herunter.
Was nicht funktioniert:
Obiges funktioniert nur wenn der PC in der Firma bereits hochgefahren ist. Wird er erst mit Hilfe des Scripts hochgefahren (was funktioniert) ,kommt gleich der
Remote Desktop Befehl,der natürlich fehlschlägt weil der PC in der kurzen Zeit noch nicht hochgefahren ist.
Ich habe mir seither mit dem WScript.Sleep Befehl geholfen,aber ich möchte es eigentlich so lösen,daß irgendwie der "Hochfahrstatus" des Remote PC´s abgefragt wird.
Erst wenn der Remote PC bis zum Anmeldebildschirm hochgefahren ist ,soll das Script den Remote Desktop Befehl starten.
Lässt sich das irgendwie realisieren ?
Hier noch mein momentanes Script:
Dim rdpdatei
rdpdatei = "192.168.115.93"
msgbox "Es wird nun die VPN Verbindung hergestellt",64,"Hinweis"
Set WSHShell = CreateObject("WScript.Shell")
' VPN Verbindung herstellen
wshshell.run "rasphone -d VPN-Office",,true
' Ping Befehl
strComputer = "Rolf"
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& strComputer & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 Then
WScript.Echo "PC " & strComputer & " ist nicht online." & vbcrlf & vbcrlf & "Der PC wird jetzt gestartet....." & vbcrlf & vbcrlf & "Bitte etwas Geduld - Remote Desktop startet automatisch sobald der PC hochgefahren ist"
' Externes WOL Programm mit MAC Adresse starten
wshshell.run "d:\mc-wol (MAC) /a (Broadcast IP)", 1, true ' Rolf MaC
else
msgbox "PC ist bereits Online !!",64,"Hinweis"
End If
Next
' Remote Desktop wird gestartet
wshshell.run "%systemroot%\system32\mstsc.exe /console /w:1280 /h:1024 /V:" & rdpdatei
' Schleife die auf Beendigung des MSTSC Prozesses abfragt
Do
strComputer = "."
strProcess = "mstsc.exe"
strProgPath = "%SystemRoot%\system32\mstsc.exe"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & strProcess & "'")
Loop until colProcesses.Count = 0 ' Prozess läuft nicht mehr - Schleifenabruch
' Vebindung trennen und Remote PC herunterfahren
value = msgbox ("Soll der PC im Büro heruntergefahren werden, bevor die Verbindung getrennt wird ?",32 + vbYesNo,"Frage")
if value = vbyes then
Dim objShell, strComputer, strInput
Dim strShutdown
strComputer = "Rolf"
strShutdown = "shutdown -s -t 0 -f -m \\" & strComputer
set objShell = CreateObject("WScript.Shell")
objShell.Run strShutdown
msgbox "Verbindung wird jetzt getrennt",64,"Hinweis"
wshshell.run "rasphone -h VPN-Office"
end if
if value = vbno then
msgbox "Verbindung wird jetzt getrennt",64,"Hinweis"
wshshell.run "rasphone -h VPN-Office"
end if
Mein Vater möchte von zu Hause per VPN und Remote Desktop auf seinen PC in der Firma zugreifen. Dieses habe ich mit einem VB Script realisiert.
Der PC zuhause und in der Firma haben Windows XP Prof. mit SP3 installiert.
Was bereits funktioniert:
Das Script stellt automatisch die VPN Verbindung her,fährt den PC in der Firma per Wake on Lan hoch und startet dann automatisch Remote Desktop.
Er kann sich dann anmelden und später trennt das Script die Verbindung und fährt auch vorher auf Wunsch den PC in der Firma herunter.
Was nicht funktioniert:
Obiges funktioniert nur wenn der PC in der Firma bereits hochgefahren ist. Wird er erst mit Hilfe des Scripts hochgefahren (was funktioniert) ,kommt gleich der
Remote Desktop Befehl,der natürlich fehlschlägt weil der PC in der kurzen Zeit noch nicht hochgefahren ist.
Ich habe mir seither mit dem WScript.Sleep Befehl geholfen,aber ich möchte es eigentlich so lösen,daß irgendwie der "Hochfahrstatus" des Remote PC´s abgefragt wird.
Erst wenn der Remote PC bis zum Anmeldebildschirm hochgefahren ist ,soll das Script den Remote Desktop Befehl starten.
Lässt sich das irgendwie realisieren ?
Hier noch mein momentanes Script:
Dim rdpdatei
rdpdatei = "192.168.115.93"
msgbox "Es wird nun die VPN Verbindung hergestellt",64,"Hinweis"
Set WSHShell = CreateObject("WScript.Shell")
' VPN Verbindung herstellen
wshshell.run "rasphone -d VPN-Office",,true
' Ping Befehl
strComputer = "Rolf"
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& strComputer & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 Then
WScript.Echo "PC " & strComputer & " ist nicht online." & vbcrlf & vbcrlf & "Der PC wird jetzt gestartet....." & vbcrlf & vbcrlf & "Bitte etwas Geduld - Remote Desktop startet automatisch sobald der PC hochgefahren ist"
' Externes WOL Programm mit MAC Adresse starten
wshshell.run "d:\mc-wol (MAC) /a (Broadcast IP)", 1, true ' Rolf MaC
else
msgbox "PC ist bereits Online !!",64,"Hinweis"
End If
Next
' Remote Desktop wird gestartet
wshshell.run "%systemroot%\system32\mstsc.exe /console /w:1280 /h:1024 /V:" & rdpdatei
' Schleife die auf Beendigung des MSTSC Prozesses abfragt
Do
strComputer = "."
strProcess = "mstsc.exe"
strProgPath = "%SystemRoot%\system32\mstsc.exe"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & strProcess & "'")
Loop until colProcesses.Count = 0 ' Prozess läuft nicht mehr - Schleifenabruch
' Vebindung trennen und Remote PC herunterfahren
value = msgbox ("Soll der PC im Büro heruntergefahren werden, bevor die Verbindung getrennt wird ?",32 + vbYesNo,"Frage")
if value = vbyes then
Dim objShell, strComputer, strInput
Dim strShutdown
strComputer = "Rolf"
strShutdown = "shutdown -s -t 0 -f -m \\" & strComputer
set objShell = CreateObject("WScript.Shell")
objShell.Run strShutdown
msgbox "Verbindung wird jetzt getrennt",64,"Hinweis"
wshshell.run "rasphone -h VPN-Office"
end if
if value = vbno then
msgbox "Verbindung wird jetzt getrennt",64,"Hinweis"
wshshell.run "rasphone -h VPN-Office"
end if
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 154986
Url: https://administrator.de/contentid/154986
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
2 Kommentare
Neuester Kommentar