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

最初のコード スニペット (コメント アウト) では、コマンドを実行してバッチ ファイルから stdout をキャプチャできます。2 番目のコード スニペットでは、stdout をキャプチャできません。

バッチ スクリプトを昇格された権限で実行できるようにする必要があるため、2 つの機能の妥協点を探しています。

他の機能の制限により、呼び出しスクリプト全体を昇格モードで実行することはできません。

基本スクリプトの範囲内のオプションが不足しているため、この出力をログに追加する方法についてのアイデアを探しています。

答え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() 呼び出しでは既に昇格された権限が与えられ、stdout がキャプチャされます。

ちょっと奇抜だけど、楽です。

関連情報