如何在VBScript中重置标准输出流

如何在VBScript中重置标准输出流,vbscript,stdout,ping,Vbscript,Stdout,Ping,我想使用VB脚本(中的完整脚本)检查某些服务器在每次登录到工作计算机时是否已启动(响应ping) 然而,似乎当我抓住输出的全部结果时 strPingResultsFull = LCase(WshExec.StdOut.ReadAll) …在我循环各个行之前 Do Until WshExec.StdOut.AtEndOfStream …那WshExec.StdOut已经是AtEndOfStream,所以我从来没有得到任何结果 我任务的第一部分——这个理论正确(或可能正确)吗?第二部分-如何进行

我想使用VB脚本(中的完整脚本)检查某些服务器在每次登录到工作计算机时是否已启动(响应ping)

然而,似乎当我抓住输出的全部结果时

strPingResultsFull = LCase(WshExec.StdOut.ReadAll)
…在我循环各个行之前

Do Until WshExec.StdOut.AtEndOfStream
…那
WshExec.StdOut
已经是
AtEndOfStream
,所以我从来没有得到任何结果

我任务的第一部分——这个理论正确(或可能正确)吗?第二部分-如何进行分类(即重置流以便我可以单独检查每一行)?谢谢

”将目标设置为ping
标准目标(0)=“192.168.1.6”TTSA
标准目标(1)=“192.168.1.7”TTSB
标准目标(2)=“192.168.1.14”TTSC
标准目标(3)=“192.168.1.12”TTSD
设置WshShell=WScript.CreateObject(“WScript.Shell”)
'将所有目标循环到ping
对于i=0到UBound(strTarget)
"瞄准目标"
设置WshExec=WshShell.Exec(“ping-n2-w500”&strTarget(i)),发送2个回显请求,最多等待0.5秒
“获取ping的全部结果
strPingResultsFull=LCase(WshExec.StdOut.ReadAll)
'将'strPingResultsPart'设置为空字符串
strPingResultsPart=“”
"抓取ping的结果,
直到WshExec.StdOut.AtEndOfStream
strSingleLine=WshExec.StdOut.ReadLine()
如果Instr(strSingleLine,“Ping统计数据”)0或Instr(strSingleLine,“数据包:”)0,则
strPingResultsPart=strPingResultsPart&strSingleLine
如果结束
环
'检查是否有要输出的内容(应该有,即使ping都失败了)
如果strPingResultsPart“”则
Msgbox“非空-”&strPingResultsPart
'将ping结果添加到正确的结果字符串
如果InStr(strPingResultsFull,“回复自”)则
strOutputSuccess=strOutputSuccess&STRPINGREULTSPART&VBCrLf
其他的
strOutputFailure=strOutputFailure&STRPINGREULTSPART&VBCrLf
如果结束
如果结束
设置WshExec=Nothing
下一个

在第一次呼叫后
WshExec.StdOut.ReadAll
您已经在
AtEndOfStream
因此

Do Until WshExec.StdOut.AtEndOfStream

…什么也做不了。您不能通过查找
StdOut
来多次读取它。

如果
strPingResultsFull
填充正确,为什么不
Split()
输出并迭代生成的数组?嗯,我想可以。不是那样想的!我想这就是为什么它什么都不做的原因,所以大部分问题是如何倒带(重置流)。很遗憾,您不能这样做,但在本例中,我能够在循环每一行的同时构建完整的输出。谢谢
Do Until WshExec.StdOut.AtEndOfStream