strcmd="cmd /c " & sCurPath & "\vsswritercheck.bat"
return = wshshell.run(strcmd , 0 , true)
if return=0 then
blnSuccess = True
else
blnSuccess = False
end if
Estou tentando executar o seguinte snippet de código como parte de uma ferramenta para reunir e registrar alguns diagnósticos de sistema pertinentes. O objetivo deste snippet é reunir o resultado da execução do comando:
vssadmin list writers
O snippet é o seguinte:
' 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
Com o primeiro trecho de código (comentado), posso executar o comando e capturar stdout a partir do arquivo de lote. No segundo código recortado, não consigo capturar stdout.
Eu preciso poder executar o script em lote com permissões Elevadas, por isso estou procurando um compromisso entre a funcionalidade dos dois.
Não consigo executar todo o script de chamada no modo elevado devido a restrições de outras funcionalidades.
Estou procurando ideias sobre como adicionar essa saída ao meu log, já que estou ficando sem opções que estão no escopo dos scripts básicos.
Que tal usar os dois?
Use esse código que você comentou, que funciona no modo não elevado, e adicione um teste extra onde, se direitos elevados forem necessários, o script chamará a si mesmo usando ShellExecute (), fazendo a chamada subsequente para Exec () para já ter direitos elevados e ainda capturar stdout.
É um pouco maluco, mas sem esforço.