2011-02-28 47 views
3

我有一個調用PowerShell腳本的MSBuild腳本。 PS腳本的輸出包含一些長線,其中一些(但不是全部)分成多行,例如。從MSBuild調用PowerShell打破長文本行

wait-untilOpCompleted : Cannot bind argument to parameter 'operationId' because 
    it is null. 

如何阻止它這樣做?我只想一個長線,如:

wait-untilOpCompleted : Cannot bind argument to parameter 'operationId' because it is null. 

回答

3

,以防止PowerShell的基於控制檯的寬度斷裂線,最簡單的方法是重寫你的腳本,像這樣頂級的Out-Default默認實現:

filter Out-Default { 
    $input | Out-String -Width 500 -Stream | 
      Microsoft.PowerShell.Utility\out-default 
} 
+0

謝謝,但似乎並沒有幫助。也許錯誤消息不會通過Out-Default? – EMP 2011-03-01 02:01:31

+0

對不起,它應該是一個過濾器,而不是一個功能。我更新了答案。 – 2011-03-04 21:00:07

0

Keith的回答似乎不太刺擾。但是,如果您無法使其工作,則可嘗試的另一件事是手動設置主機的寬度。從previous answer

# Update output buffer size to prevent clipping in Visual Studio output window. 
if($Host -and $Host.UI -and $Host.UI.RawUI) { 
    $rawUI = $Host.UI.RawUI 
    $oldSize = $rawUI.BufferSize 
    $typeName = $oldSize.GetType().FullName 
    $newSize = New-Object $typeName (500, $oldSize.Height) 
    $rawUI.BufferSize = $newSize 
} 

它只是設置的500個字符的主機的RawUI輸出緩衝區(新的寬度雖然,因爲我們在一些環境中運行我們的構建,我們不希望腳本失敗只是因爲它無法使輸出變大一些,代碼相當防守)。

如果你總是將RawUI(和大多數人)的環境中運行,該代碼可以大大簡化:

$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size (500, 25)