VBScript 从 ShellExecute 捕获 StdOut

VBScript 从 ShellExecute 捕获 StdOut

我正在尝试运行以下代码片段作为工具的一部分来收集和记录一些相关的系统诊断信息。此代码片段的目的是收集运行该命令的结果:

vssadmin list writers

代码片段如下:

'   Set WshShell = CreateObject("WScript.Shell")
'   WScript.Echo sCurPath & "\vsswritercheck.bat"
'   Set WshShellExec = WshShell.Exec("elevate.cmd cmd.exe /c " & sCurPath & "\vsswritercheck.bat")

Set oShell = CreateObject("Shell.Application")
oShell.ShellExecute "cmd.exe", sCurPath & "\vsswritercheck.bat", , "runas", 1
vsswriter = VSSWriterCheck

Select Case oShell.Status
    Case WshFinished
        strOutput = oShell.StdOut.ReadAll
    Case WshFailed
        strOutput = oShell.StdErr.ReadAll
End Select
WScript.Echo strOutPut
vsswriter = strOutPut

使用第一个代码片段(注释掉),我可以运行命令并从批处理文件中捕获标准输出。在第二个代码片段中,我无法捕获标准输出。

我需要能够以提升的权限运行批处理脚本,因此我正在寻找两者功能之间的折衷方案。

由于其他功能的限制,我无法在提升模式下运行整个调用脚本。

我正在寻找有关如何将此输出添加到我的日志中的任何想法,因为我已经用完了基本脚本范围内的选项。

答案1

strcmd="cmd /c " & sCurPath & "\vsswritercheck.bat"
return = wshshell.run(strcmd , 0 , true)
if return=0 then
    blnSuccess = True
else
    blnSuccess = False
end if

答案2

那么同时使用它们怎么样?

使用您注释掉的代码,该代码在非提升模式下工作,并添加额外的测试,如果需要提升权限,脚本将使用 ShellExecute() 调用自身,导致后续对 Exec() 的调用已经具有提升的权限并仍然捕获标准输出。

这有点古怪,但却毫不费力。

相关内容