Redirect 执行进程并重定向输出

Redirect 执行进程并重定向输出,redirect,vbscript,stdout,Redirect,Vbscript,Stdout,我使用VBScript运行一个进程。这个过程通常需要5-10分钟才能完成,如果我单独运行这个过程,那么它会在运行时提供间歇性输出 我希望在使用VBScript运行进程时实现相同的逻辑。谁能告诉我怎么做吗 Set Process = objSWbemServices.Get("Win32_Process") result = Process.Create(command, , , intProcessID) waitTillProcessFinishes objSWbemServices,intP

我使用VBScript运行一个进程。这个过程通常需要5-10分钟才能完成,如果我单独运行这个过程,那么它会在运行时提供间歇性输出

我希望在使用VBScript运行进程时实现相同的逻辑。谁能告诉我怎么做吗

Set Process = objSWbemServices.Get("Win32_Process")
result = Process.Create(command, , , intProcessID)
waitTillProcessFinishes objSWbemServices,intProcessID
REM How to get the output when the process has finished or while it is running

您无权访问通过WMI启动的进程的输出。您可以将输出重定向到一个文件:

result = Process.Create("cmd /c " & command & " >C:\out.txt", , , intProcessID)
并定期读取文件:

Set fso = CreateObject("Scripting.FileSystemObject")
linesRead = 0
qry = "SELECT * FROM Win32_Process WHERE ProcessID=" & intProcessID

Do While objSWbemServices.ExecQuery(qry).Count > 0
  Set f = fso.OpenTextFile("C:\out.txt")
  Do Until f.AtEndOfStream
    For i = 1 To linesRead : f.SkipLine : Next
    WScript.Echo f.ReadLine
    linesRead = linesRead + 1
  Loop
  f.Close

  WScript.Sleep 100
Loop
以上假设进程在本地主机上运行。如果它在远程主机上运行,则需要从UNC路径读取该文件

对于本地进程,该方法是一种替代方法,因为它允许您访问进程的StdOut:

Set sh = CreateObject("WScript.Shell")
Set p  = sh.Exec(command)

Do While p.Status = 0
  Do Until p.StdOut.AtEndOfStream
    WScript.Echo p.StdOut.ReadLine
  Loop
  WScript.Sleep 100
Loop

WScript.Echo p.StdOut.ReadAll