[英]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.