VBScript getting results from Shell

2019-01-19 06:38发布

Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run "runas ..."

How do I get the results and display in a MsgBox

3条回答
看我几分像从前
2楼-- · 2019-01-19 06:54

You will want to use the WshShell object's Exec method instead of Run. Then simply read the command line's output from the standard streams. Try this one:

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
查看更多
爷、活的狠高调
3楼-- · 2019-01-19 06:57
var errorlevel = new ActiveXObject('WScript.Shell').Run(command, 0, true)

the third parameter must be true, and errorlevel will be return value, check if it is equal 0.

查看更多
孤傲高冷的网名
4楼-- · 2019-01-19 07:17

This is a modified version of Nilpo's answer that fixes the issue with WshShell.Exec being asynchronous. We do a busy-loop waiting until the shell's status is no longer running, and then we check the output. Change the command-line argument -n 1 to a higher value to make ping take longer, and see that the script will wait longer until completion.

(If anyone has a true asynchronous, event-based solution to the problem, then please let me know!)

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
查看更多
登录 后发表回答