Во-первых, , если вам специально не нужно запускать командный файл в новом окне , не используйте Start-Process
- используйте прямой вызов вместо , что неявно синхронно и позволяет захватить или перенаправить вывод :
# Invoke the batch file synchronously (wait for it to exit)
# and capture its (standard) output in variable $A
# To print the batch file's output to the console instead, just use:
# .\refresh.bat
$A = .\refresh.bat
См. этот ответ для получения дополнительной информации.
Также обратите внимание, что Start-Process
никогда не позволяет вам напрямую захватывать вывод вызванной программы (вы можете перенаправить его только в файлы с -RedirectStandardOutput
и -RedirectStandardOutput
); ваша команда c захватывает ничего [1] в $A
; добавление -PassThru
действительно возвращает что-то, но не вывод программы, а объект информации о процессе (System.Diagnostics.Process
).
Если вы делаете необходимо запустить командный файл в новом окне и вы хотите оставить это окно открытым :
Start-Process -Wait -FilePath cmd -ArgumentList '/k .\refresh.bat'
Опираясь на привязку позиционных параметров, описанное выше можно упростить на:
Start-Process -Wait cmd '/k .\refresh.bat'
[1] Строго говоря, $A
назначается синглтон [System.Management.Automation.Internal.AutomationNull]::Value
, который в большинстве случаев ведет себя как $null
.