Я использую PowerShell v3.0 для запуска нового процесса cmd.exe, в котором я затем загружаю командную строку Visual Studio для выполнения сборки, например:Как получить вывод командной строки в переменную с помощью PowerShell
Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuildInVsCommandPrompt -WindowStyle $windowStyle -Wait
Это работает, и это открывает новое окно командной строки, и я могу видеть сборки происходит, а потом, когда сборка закончена в окно командной строки закрывается. Я хотел бы получить текст, который записывается в окно командной строки, и хранить его в переменной, чтобы проверить, прошла ли сборка или нет. Я попытался использовать это, но это не сработает; переменная $ buildOutput пуст:
Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuildInVsCommandPrompt -WindowStyle $windowStyle -Wait -OutVariable buildOutput
Write-Host "Build output = $buildOutput"
Это имеет смысл, так как процесс cmd.exe не возвращает текст; он просто пишет это в свое окно. Есть ли способ для меня сохранить этот текст в переменной для исходного сценария powershell? Я знаю, что могу предоставить параметр MsBuild, чтобы он записывал журнал сборки в файл, но я ищу решение, которое не связано с записью в файл журнала и необходимостью его удалить позже.
Любые предложения приветствуются. Благодаря!
< # EDIT #>
Спасибо за все ответы до сих пор! Популярным предложением было просто вызвать MsBuild.exe напрямую, не используя cmd.exe. Причина, по которой мне нужно пройти через cmd.exe, - это некоторые проекты, которые не успешно создаются, если вызваны непосредственно из MsBuild.exe (например, проекты XNA). Вместо этого мне нужно вызвать MsBuild.exe из командной строки Visual Studio, чтобы (предположим) установить все необходимые переменные среды. Я думаю, я мог бы просто вызвать VS Command Prompt напрямую, но у него будет та же проблема, что и вызов cmd.exe. Если я не могу найти командную строку VS, я возвращаюсь к вызову MsBuild.exe напрямую, поэтому эти ответы по-прежнему оцениваются.
Почему его нет написать в журнал? Вы можете использовать PowerShell, чтобы немедленно использовать файл журнала и удалить его для вас. – Matt
Просто вызовите msbuild (или соответствующий исполняемый файл) напрямую и избегите 'cmd.exe'? Я не уверен, что «cmd.exe» имеет «stdout». Возможно, на это влияет флаг '/ c'? – 2013-02-23 00:22:33
Вы можете запустить его как фоновое задание (используя cmd/c) и управлять отображением и окончательным отображением вывода с помощью задания-получателя. – mjolinor