VBScript Захват StdOut от ShellExecute

8679
Joe

Я пытаюсь запустить следующий фрагмент кода как часть инструмента, чтобы собрать и зарегистрировать некоторую соответствующую диагностику системы. Цель этого фрагмента - собрать результат выполнения команды:

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 

С первым фрагментом кода (закомментированным) я могу запустить команду и получить стандартный вывод из командного файла. Во втором фрагменте кода я не могу перехватить стандартный вывод.

Мне нужно иметь возможность запускать пакетный скрипт с повышенными разрешениями, поэтому я ищу компромисс между функциональностью этих двух.

Я не могу запустить весь вызывающий скрипт в режиме повышенных прав из-за ограничений других функций.

Я ищу какие-либо идеи о том, как добавить этот вывод в мой журнал, поскольку у меня заканчиваются опции, входящие в сферу основных сценариев.

2

2 ответа на вопрос

1
José Luís Teixeira
strcmd="cmd /c " & sCurPath & "\vsswritercheck.bat" return = wshshell.run(strcmd, 0, true) if return=0 then blnSuccess = True else blnSuccess = False end if 
Было бы неплохо, если бы вы могли предоставить немного контекста, чтобы идти с кодом :) Der Hochstapler 11 лет назад 0
Я думаю, что это почти то, что мне нужно, но мне нужно захватить StdOut из сценария, а не только, если он был успешным или нет. Joe 11 лет назад 0
0
Crafty

Как насчет использования их обоих?

Используйте тот код, который вы закомментировали, который работает в режиме без повышенных прав, и добавьте дополнительный тест, в котором, если требуются повышенные права, сценарий вместо этого будет вызывать себя с помощью ShellExecute (), в результате чего последующий вызов Exec () уже будет иметь повышенные права и до сих пор захватить стандартный вывод.

Это немного странно, но без усилий.

Похожие вопросы