Мне нужно запустить исполняемый файл, для которого требуются некоторые параметры в этой форме
c:\Program Files\Tools\Tool -p Parameter -d .....
Исполняемый файл сообщает что-то на стандартный вывод, что следует игнорировать. Строки вывода ошибок должны храниться в массиве строк для дальнейшей обработки в PowerShell.
Я пытался
$err = & "c:\Program Files\Tools\Tool -p Parameter"
Invoke-Command "c:\Program Files\Tools\Tool -p Parameter" -ErrorVariable errorOutput
Первый не перехватывает stderr. Последнее не удалось, потому что строка содержит больше, чем имя исполняемого файла. -p
не является частью имени исполняемого файла. Если я опущу двойные кавычки, Invoke-Command интерпретирует -p
как сокращение для «PipelineVariable».
Как запустить исполняемый файл при получении stderr?
Редактировать: Вдохновленный ответом js2010 Я пробовал это
$err = $( $output= & "c:\Program Files\Tools\Tool -p Parameter" ) 2>&1
К сожалению, результат в $ err:
Tool.exe : ==> Error: Product Bar\1.01.01 has not been found!
At line:1 char:17
+ ... = ( $out = & "c:\Program Files\Tools\Tool -p Parameter" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (==> Error: Prod...been found!:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Очевидно, это не вывод stderr Tool.exe, но также некоторые аннотации PowerShell.
Edit2: Переменная $err
по-прежнему не может использоваться, если пропущен &
:
$err = $( $output= "c:\Program Files\Tools\Tool -p Parameter" ) 2>&1
Tool.exe : ==> Error: Product Bar\1.01.01 has not been found!
At line:1 char:17
+ ... = ( $out = "c:\Program Files\Tools\Tool -p Parameter" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (==> Error: Prod...been found!:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError