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.