Это измененная версия ответа Nilpo, которая устраняет проблему с асинхронностью WshShell.Exec
.Мы выполняем цикл занятости, ожидая, пока статус оболочки больше не выполняется, и затем проверяем вывод.Измените аргумент командной строки -n 1
на более высокое значение, чтобы ping
занял больше времени, и убедитесь, что сценарий будет дольше ждать до его завершения.
(Если у кого-либо есть истинное асинхронное решение на основе событийк проблеме, тогда, пожалуйста, дайте мне знать!)
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2
Dim shell : Set shell = CreateObject("WScript.Shell")
Dim exec : Set exec = shell.Exec("ping.exe 127.0.0.1 -n 1 -w 500")
While exec.Status = WshRunning
WScript.Sleep 50
Wend
Dim output
If exec.Status = WshFailed Then
output = exec.StdErr.ReadAll
Else
output = exec.StdOut.ReadAll
End If
WScript.Echo output