pingu256
Goto Top

Netzwerk check bevor mapping durchgeführt wird VBS Script

Hallo Zusammen,

ich bin auf der Suche nach einer Erweiterung für unser VBS Script, welches uns die Laufwerke abhängig in welche OU der AD man sich befindet mappt.

Die Erweiterung soll unseren Fileserver maximal 10 x im Abstand von 5 Sekunden anpingen bevor das Script abgearbeitet wird. Wenn der Server erreichbar ist darf das script natürlich sofort losrenne. Falls es der server nicht erreichbar ist sollte eine Meldung erscheinen.

Einige interessante Ansätze habe ich schon gefunden wie z.b. diesen hier:


Server = "Servername" 'oder auch IP  

Start = Now
Do Until Ping(Server)
	WScript.Sleep 1000
Loop
Ende = Now

WScript.Echo "Script gestartet um:    " & Start & vbCrLF & _  
	"Server erreichbar um: " & Ende & vbCrLF & vbCrLF & _  
	"Dauer: " & DateDiff("s", Start, Ende) & " Sekunden"  


Function Ping(machine)
PingResult = True
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._  
	ExecQuery("select * from Win32_PingStatus where address = '"_  
	& machine & "'")  
For Each objStatus in objPing
	If IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 Then 
		PingResult = False
	End If
Next
Ping = PingResult
End Function


jedoch weiß ich nicht welche Zeilen ich entfernen/anpassen muss damit das script sich wie oben beschrieben verhält.

Vielen Dank für ein paar Tipps

Gruß
p.

Content-ID: 174915

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

Ausgedruckt am: 20.11.2024 um 13:11 Uhr

bastla
bastla 19.10.2011 um 11:39:15 Uhr
Goto Top
Hallo pingu256!

Etwa so (wobei Du die Zeilen 12 und vor allem 10 vermutlich etwas anders formulieren wirst face-wink):
Server = "Servername" 'oder auch IP  

For i = 1 To 10
    Online = Ping(Server)
    If Online Then Exit For
    WScript.Sleep 5000
Next

If Online Then
    WScript.Echo "Netzlaufwerke können verbunden werden ..."  
Else
    WScript.Echo "Server nicht erreichbar!"  
End If

Function Ping(machine)
PingResult = True
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._  
    ExecQuery("select * from Win32_PingStatus where address = '"_  
    & machine & "'")  
For Each objStatus in objPing
    If IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 Then 
        PingResult = False
    End If
Next
Ping = PingResult
End Function
Grü0ße
bastla
pingu256
pingu256 19.10.2011 um 12:05:22 Uhr
Goto Top
Hey bastla,

vielen dank das ging ja superschnell.

Kurze frage noch zum Verständnis was wird hier gemacht? Die ersten beiden Zeilen verstehe ich noch. Aber wofür sind die anderen?

Function Ping(machine)  'Funktionsname definiert  
PingResult = True  ' Ergebnis definiert  
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._                         ' ?  
    ExecQuery("select * from Win32_PingStatus where address = '"_      
    & machine & "'")  
For Each objStatus in objPing
    If IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 Then 
        PingResult = False
    End If
Next
Ping = PingResult
End Function


Modifikation des scripts bei erreichbarkeit soll keine meldung ausgegeben werden würde dann so funktioneren oder?

If Online Then
    
Else
    WScript.Echo "Server nicht erreichbar!"  
End If
bastla
bastla 19.10.2011 um 12:12:49 Uhr
Goto Top
Hallo pingu256!

Die "Function Ping()" verwendet WMI, um einen Ping (auf den als Parameter übegebenen Server) durchzuführen und gibt ein "True" oder "False" als Ergebnis zurück ...
bei erreichbarkeit soll keine meldung ausgegeben werden
Muss auch nicht - aber hier würde das Mappen der Laufwerke gut hinpassen ... face-wink

... bzw alternativ:
If Not Online Then
    WScript.Echo "Server nicht erreichbar!"  
    WScript.Quit 1 'Script beenden  
End If

' ... und hier, was im "Online"-Fall so zu tun wäre ...  
Grüße
bastla