VBscript Ping循环脚本问题

时间:2014-10-07 20:54:24

标签: loops vbscript while-loop ping wsh

我正在编写一个用于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

1 个答案:

答案 0 :(得分:1)

正如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&#34;请求超时&#34;。如果找到则回显文本,终止ping并退出循环。请注意,它不会检查它是否发生了两次以上,因为我不确定这是否是你想要的;如果是这样,那么你可能应该创建一个变量,其计数在每次迭代时增加,如果它是两次/两次以上,则执行相同的操作(echo,terminate,exit loop)。

//编辑

好的,#34;无限的&#34; ping直到请求超时,此时它应该打印消息并退出循环。这可以通过ping命令本身很容易地实现,使用-t开关 - 这将导致ping无限期地继续,而不是默认情况下在4次ping后停止。所以我们只是将它添加到这一行: strCommand = "ping microsoft.com -t" ' microsoft.com times out for me 并保留其余代码(我用单循环发布的代码)。