Как я могу перенаправить поток ошибок при вызове powershell.exe с помощью параметра -File - PullRequest
0 голосов
/ 25 января 2019

Я выполняю сценарий powershell во время последовательности задач развертывания ОС, используя SCCM. Из-за особенностей этой экосистемы мне приходится вызывать скрипт с синтаксисом, подобным этому (в меру моих экспериментов):

powershell.exe -executionpolicy bypass -file "w:\scripts\script.ps1" -param1 "%param1%" -param2 "%param2%"

Это работает нормально, но я хотел зафиксировать вывод этого и любых сообщений об ошибках, которые он выдает. Обычно я бы сделал что-то вроде:

powershell.exe -executionpolicy bypass -file "w:\scripts\script.ps1" -param1 "%param1%" -param2 "%param2%" > "%logfile" 2>&1

Однако, согласно документации, параметр -file должен быть последним параметром, а приведенное выше вызывает ошибку, так как он пытается интерпретировать «>» как параметр.

Очевидно, я не могу использовать:

powershell.exe -executionpolicy bypass -file "w:\scripts\script.ps1" -param1 "%param1%" -param2 "%param2%" | out-file "%logfile"

потому что это механизм командной строки, поэтому даже если канал не интерпретируется как параметр, out-файл будет интерпретироваться как исполняемый файл, а не как командлет. И даже если это сработало, out-file не перехватывает поток ошибок.

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

Спасибо, == Мэтт

1 Ответ

0 голосов
/ 26 января 2019

Как отмечалось в моем комментарии к вопросу, это, по-видимому, было связано с особенностью механизма последовательности задач SCCM, которая почему-то приводит к интерпретации cmd /c powershell.exe иначе, чем powershell.exe.

Добавление cmd /c решена проблема интерпретации > как ввода параметра -file, а не как оператора перенаправления потока.

На самом деле я вновь обнаружил, что использую синтаксис, такой как: powershell.exe -executionpolicy bypass -file "w:\scripts\script.ps1" -param1 "%param1%" -param2 "%param2%" > "%logfile" 2>&1 успешно внемеханизм последовательности задач, в других сценариях PowerShell и пакетных сценариях, так что это не проблема PowerShell или интерпретатора командной строки.

...