ShellExecute에서 VBScript 캡처 StdOut

ShellExecute에서 VBScript 캡처 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을 캡처할 수 있습니다. 두 번째 코드 조각에서는 stdout을 캡처할 수 없습니다.

높은 권한으로 배치 스크립트를 실행할 수 있어야 하므로 두 기능 간의 절충안을 찾고 있습니다.

다른 기능의 제한으로 인해 관리자 모드에서 전체 호출 스크립트를 실행할 수 없습니다.

기본 스크립트 범위 내에 있는 옵션이 부족하므로 이 출력을 내 로그에 추가하는 방법에 대한 아이디어를 찾고 있습니다.

답변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을 캡처합니다.

조금 엉뚱하지만 쉽지 않습니다.

관련 정보