我使用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提供一個參數,讓它將構建日誌寫入文件,但是我正在尋找一種不涉及寫入日誌文件並稍後刪除它的解決方案。
任何建議表示讚賞。謝謝!
<#編輯#>
感謝所有迄今的答覆!一個流行的建議是直接調用MsBuild.exe而不使用cmd.exe。我需要通過cmd.exe的原因是,如果直接從MsBuild.exe調用某些項目(例如XNA項目),則無法成功構建。相反,我需要從Visual Studio命令提示符中調用MsBuild.exe,以便(我假設)設置了所有必需的環境變量。我想我可以直接調用VS命令提示符,但它也會有和調用cmd.exe一樣的問題。如果我找不到VS命令提示符,我會直接調用MsBuild.exe,所以這些答案仍然值得讚賞。
爲什麼不用它寫入日誌?您可以使用PowerShell立即使用日誌文件並將其刪除。 – Matt 2013-02-23 00:16:46
直接調用msbuild(或適當的可執行文件)並避免'cmd.exe'?我不確定'cmd.exe'「是否有」stdout。也許這受'/ c'標誌影響? – 2013-02-23 00:22:33
您可以將其作爲後臺作業運行(使用cmd/c),並使用接收作業控制輸出的顯示和最終處置。 – mjolinor 2013-02-23 01:59:28