2013-08-06 100 views
3

我使用PowerShell爲項目創建了一些新的構建腳本,並且在我將其稱爲並將其保存到文本文件時捕獲MSBuild的輸出。我試過,沒有運氣這樣做,到目前爲止,一對夫婦不同的方法 - 這是我最後一次嘗試(寫Buildlog只是手柄覈銷輸出到日誌):在PowerShell腳本中捕獲MSBuild.exe輸出

開始處理$ msBuildExecutable $ buildArgs -Wait | Write-Buildlog

儘管MSBuild運行正常,但根本沒有輸出被捕獲。任何提示將不勝感激,因爲我已經做了一些搜索,並沒有發現任何有用的迄今,這是令人驚訝的:)

謝謝!

回答

3

導向錯誤如果MSBuild中的一個記錄或處理cmdlet的要管輸出,你不應該Start-Process首發,只是執行它正常。

PS> msbuild.exe $flag1 $flag2 $thingToBuild | Write-Buildlog 

您可能還需要重定向stderr以捕獲更多輸出。在這種情況下,你將需要添加2>&1

PS> msbuild.exe $flag1 $flag2 $thingToBuild 2>&1 | Write-Buildlog 

Start-Process將啓動PowerShell的任何環境或託管之外你的過程,所以獲得輸出和發送消息到的cmdlet變得更加困難。如果你想在PowerShell中處理可執行的輸出,那麼最好是一直停留在PowerShell環境中。

+0

嗨,這似乎不工作: $ msBuildExecutable + $ buildArgs 2>&1 | Write-BuildLog 甚至似乎沒有運行MSBuild? – DashRantic

+0

更多詳細信息 - 我正在尋找運行特定版本的MSBuild,這就是爲什麼我將它放在一個變量中。但看起來我可以按照您提出的方式運行它,這就是爲什麼我首先使用Start-Process的原因 - 還有另一種方法可以在沒有Start-Process的情況下執行此操作嗎? – DashRantic

+0

也只是試過:&$ msBuildExecutable $ buildArgs 2>&1 | Write-BuildLog仍然沒有任何東西 – DashRantic

2

Start-Process CmdLet你有-RedirectStandardOutput參數;你有沒有測試它?

Start-Process -FilePath "C:\Windows\system32\ping.exe" -ArgumentList "MyMachine" -RedirectStandardOutput "c:\temp\p.txt" -NoNewWindow 

您還可以-RedirectStandardError

+0

謝謝!但是我想將輸出發送到我的Write-Buildlog cmdlet,它看起來不像-RedirectStandardError可以做的那樣? – DashRantic

+0

「-NoNewWindow」爲我工作。謝謝! – suhendri

2

所有你需要的是:

& msbuild.exe .\yourproj.sln |Out-Host 

甚至: & msbuild.exe \ yourproj.sln |出文件C:\ log.txt的

如果寫入文件是什麼你要。

1

你可以做任何你想要的輸出,如果你像這樣運行:

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) 

說你想有輸出到文件中。

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) | Out-File C:\text.txt 

或者它像這樣寫......

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) 2>&1 >> C:\text.txt 

注:2 「>>」 是指追加1 「>」 覆蓋先前添加的行。

或者如果你只想從一堆輸出中得到一個像「真」一樣的單詞。

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) 
if($MSBuid -match "true") 
{ 
    Write-Host "Whatever you want to say about what's true" 
} 

如果你想在控制檯中看到它,你可以這樣做。

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) | Out-Host 

或者......

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) 
Write-Host $MSBuild