Примечание: К синхронно Выполнение консольных приложений , вызов их напрямую (c:\path\to\some.exe ...
или & $exePath ...
), не не использовать Start-Process
- см. этот ответ ; таким образом, вы можете захватить их вывод непосредственно с помощью $ouput = c:\path\to\some.exe ...
или и добавить их вывод к существующему файлу с помощью >>
или по трубопроводу Add-Content
[1] - см. about_Redirection
- Используйте перенаправление
2>&1
в сочетании с >> $logFile
на , а также фиксируйте стандартный вывод ошибок вместе со стандартным выходом.
& $cmd $cmdArgs 2>&1 >> $logFile
- Используйте перенаправление
2>> $logFile
для захвата только стандартных сообщений об ошибках.
& $cmd $cmdArgs 2>> $logFile
Остальная часть этого ответа посвящена вопросу в соответствии с запросом :
Нет, (начиная с PowerShell 7.0) нет способа добавить к существующим файлам с Start-Process
'
-RedirectStandardOutput
и -RedirectStandardError
параметры - они неизменно заменяют указанные выходные файлы.
Этот ответ показывает, как использовать базовый. NET API напрямую, что позволяет вам собирать выходные данные процесса в памяти , что затем позволяет добавить это в существующий файл (например, , с
Add-Content
).
Однако, как показывает ваш собственный ответ , используется вспомогательный временный файл с
-RedirectStandardError
, чей содержимое позже добавляется к общему выходному файлу, вероятно, является самым простым решением.
[1] >>
слепо применяет кодировку Out-File
по умолчанию, которая является UTF-16LE (" Unicode ") в Windows PowerShell и без спецификации UTF-8 в PowerShell [Core] 6+; Add-Content
, напротив, пытается соответствовать существующей кодировке целевого файла.