Captura VBScript StdOut desde ShellExecute

Captura VBScript StdOut desde ShellExecute

Estoy intentando ejecutar el siguiente fragmento de código como parte de una herramienta para recopilar y registrar algunos diagnósticos pertinentes del sistema. El propósito de este fragmento es recopilar el resultado de ejecutar el comando:

vssadmin list writers

El fragmento es el siguiente:

'   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

Con el primer fragmento de código (comentado), puedo ejecutar el comando y capturar la salida estándar del archivo por lotes. En el segundo código recortado, no puedo capturar la salida estándar.

Necesito poder ejecutar el script por lotes con permisos elevados, por lo que busco un equilibrio entre la funcionalidad de los dos.

No puedo ejecutar todo el script de llamada en modo elevado debido a restricciones de otras funciones.

Estoy buscando ideas sobre cómo agregar este resultado a mi registro ya que me estoy quedando sin opciones que estén dentro del alcance de los scripts básicos.

Respuesta1

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

Respuesta2

¿Qué tal si los usamos a ambos?

Utilice ese código que comentó, que funciona en modo no elevado, y agregue una prueba adicional donde, si se necesitan derechos elevados, el script se llamará a sí mismo usando ShellExecute(), lo que provocará que la llamada posterior a Exec() ya tenga derechos elevados y aún así capturar la salida estándar.

Es un poco loco, pero no requiere esfuerzo.

información relacionada