VBScript получает результаты от Shell - PullRequest
6 голосов
/ 19 мая 2011
Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run "runas ..."

Как получить результаты и отобразить в MsgBox

Ответы [ 3 ]

20 голосов
/ 20 мая 2011

Вы захотите использовать метод Exec объекта WshShell вместо Run. Затем просто прочитайте вывод командной строки из стандартных потоков. Попробуйте это:

Const WshFinished = 1
Const WshFailed = 2
strCommand = "ping.exe 127.0.0.1"

Set WshShell = CreateObject("WScript.Shell")
Set WshShellExec = WshShell.Exec(strCommand)

Select Case WshShellExec.Status
   Case WshFinished
       strOutput = WshShellExec.StdOut.ReadAll
   Case WshFailed
       strOutput = WshShellExec.StdErr.ReadAll
End Select

WScript.StdOut.Write strOutput  'write results to the command line
WScript.Echo strOutput          'write results to default output
MsgBox strOutput                'write results in a message box
0 голосов
/ 24 июля 2017

Это измененная версия ответа 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
0 голосов
/ 08 марта 2017
var errorlevel = new ActiveXObject('WScript.Shell').Run(command, 0, true)

третий параметр должен быть истинным, а errorlevel будет возвращаемым значением, проверьте, равно ли оно 0.

...