пинг сайта, если в автономном режиме запустить другой VBS - PullRequest
1 голос
/ 25 сентября 2019

Я ищу способ пропинговать имя хоста с помощью VBScript, и если он завершается неудачно после некоторых неудачных подсчетов, если в автономном режиме он запускает другой файл VBS.

У меня есть много скриптов, которые могут пинговать хост черезVBScript, но я не знаю, и я не смог найти способ пропинговать хост и, если не пинговать, перенаправить и запустить другой VBScript.

Я пытался добавить в конце одного изэти сценарии выглядят примерно так:

If strFailedPings = "" Then WScript.Echo "Состояние Ping указанных компьютеров в порядке" Else

(это место, где идет код, чтобы открыть другой VBS)

Пример:

strComputers = "192.168.1.1,192.168.1.4"
arrComputers = Split(strComputers, ",")

For Each strComputer In arrComputers
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
        ExecQuery("SELECT * from Win32_PingStatus WHERE address = '" & _
        strComputer & "'")
    For Each objPingStatus In objPing
        If IsNull(objPingStatus.StatusCode) Or objPingStatus.StatusCode<>0 Then
            If strFailedPings <> "" Then strFailedPings = strFailedPings & vbCrLf
            strFailedPings = strFailedPings & strComputer
        End If
    Next
Next

If strFailedPings = "" Then
    WScript.Echo "Ping status of specified computers is OK"
Else
    WScript.Echo "Ping failed for the following computers:" & _
        vbCrLf & vbCrLf & strFailedPings
End If

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Выполните запрос WMI n раз в цикле For, подсчитайте и посчитайте число неудачных эхо-запросов, затем запустите другой сценарий, если число ошибок превысит заданный порог.

n = 3
threshold = 1

Set wmi = GetObject("winmgmts://./root/cimv2")

For Each strComputer In arrComputers
    qry = "SELECT * FROM Win32_PingStatus WHERE address='" & strComputer & "'"
    cnt = 0
    For i = 1 To n
        For Each objPingStatus In wmi.ExecQuery(qry)
            If IsNull(objPingStatus.StatusCode) Or objPingStatus.StatusCode<>0 Then
                cnt = cnt + 1
            End If
        Next
    Next
    If cnt > threshold Then
        'ping failed 2 or more times
        CreateObject("WScript.Shell").Run "wscript.exe ""C:\other\script.vbs""", 0, True
    End If
Next

Примечание: выможет захотеть различить sNull(objPingStatus.StatusCode) и objPingStatus.StatusCode<>0.Только последний представляет фактический статус пинга.Первый указывает на ошибку WMI.

0 голосов
/ 26 сентября 2019

Я не думаю, что вы можете разбить строку GetObject:

Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT * from Win32_PingStatus WHERE address = '" & strComputer & "'")

Когда я запускаю скрипт (я заменил Echo на MsgBox, но это не должно иметь значения), он работает нормально:

strComputers = "192.168.1.1,192.168.1.4,100.100.100.100"
arrComputers = Split(strComputers, ",")

For Each strComputer In arrComputers
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT * from Win32_PingStatus WHERE address = '" & strComputer & "'")
    For Each objPingStatus In objPing
        If IsNull(objPingStatus.StatusCode) Or objPingStatus.StatusCode <> 0 Then
            If strFailedPings <> "" Then strFailedPings = strFailedPings & vbCrLf
            strFailedPings = strFailedPings & strComputer
        End If
    Next
Next

If strFailedPings = "" Then
    MsgBox "Ping status of specified computers is OK"
Else
    MsgBox "Ping failed for the following computers:" & _
        vbCrLf & vbCrLf & strFailedPings
End If
...