簡體   English   中英

VBscript Ping循環腳本問題

[英]VBscript Ping Loop Script issue

我正在寫一個PINGS服務器並循環的VBscript。

如果"Request Time Out"大於兩個,則應執行Wscript.echo"cannot connect to server"

我的代碼如下。 似乎沒有任何語法錯誤,但是也不執行wscript.echo! 誰能幫我解決這個問題?

Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
 Rem Sends email alert
 Set wshShell = WScript.CreateObject( "WScript.Shell" )

strComputer = "."

strCommand = "ping SER1"
strResults=""
while InStr(1,StrResults,"Request timed out")>2

    Set objExecObject = objShell.Exec(strCommand)
    Do While Not objExecObject.StdOut.AtEndOfStream
WScript.echo "Cannot Connect to Server"
        strResults = objExecObject.StdOut.ReadAll()


    Loop
wend

正如JosefZ指出的那樣,您的While循環永遠不會執行,因為首次測試InStr條件為False時。 您需要做的是將外部循環轉換為Do ... Loop While循環。

另一個問題是您將Set objExecObject = objShell.Exec(strCommand)放入循環內。 您大概只希望執行一次,然后在StdOut上循環,因此應將其放在循環開始之前。

Set objExecObject = objShell.Exec(strCommand)
Do
    Do While Not objExecObject.StdOut.AtEndOfStream
        WScript.echo "Cannot Connect to Server"
        strResults = objExecObject.StdOut.ReadAll()
    Loop
Loop While InStr(1,strResults,"Request timed out")>2

我想知道的一件事是“ 如果“請求超時”超過兩個... ”。 如果您是說該文本是否全部存在(位置大於2),那么它將起作用。 如果您的意思是發現兩次以上,則不會,因為InStr只是返回搜索文本在字符串中的位置,而不是匹配計數。

最后,還不清楚為什么要使用兩個循環。 第一個實際上什么也沒做。 第二個簡單地輸出相同的文本,而不管實際發生了什么。 這就是我想要的:

strCommand = "ping microsoft.com" ' microsoft.com times out for me
Set objExecObject = objShell.Exec(strCommand)
Do While Not objExecObject.StdOut.AtEndOfStream
    If InStr(1, objExecObject.StdOut.ReadLine, "request timed out", 1) <> 0 Then
        WScript.echo "Cannot Connect to Server"
        objExecObject.Terminate
        Exit Do
    End If
Loop

這將檢查StdOut是否存在“請求超時”。 如果找到,則回顯文本,終止ping並退出循環。 注意,它不會檢查是否發生了兩次以上,因為我不確定這是否是您想要的; 如果是這樣,那么您可能應該創建一些變量,該變量的計數在每次迭代中都會增加,如果它是兩倍/兩倍以上,則執行相同的操作(回顯,終止,退出循環)。

//編輯

好的,這樣就可以進行“無限”的ping操作,直到請求超時為止,此時應打印消息並退出循環。 使用-t開關可以很容易地在ping命令本身中完成此操作-這將導致ping操作無限期繼續,而不是默認情況下在進行4次ping之后停止。 因此,我們將其添加到此行: strCommand = "ping microsoft.com -t" ' microsoft.com times out for me並保持其余代碼(我在單循環中發布的代碼)相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM