从MSBuild调用PowerShell会破坏长行文本

时间:2011-02-28 22:28:06

标签: powershell msbuild stdout

我有一个调用PowerShell脚本的MSBuild脚本。 PS脚本的输出包含一些长行,其中一些(但不是全部)被分成多行,例如。

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

如何阻止它这样做?我只想要一条长线,例如:

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

2 个答案:

答案 0 :(得分:3)

阻止PowerShell根据控制台宽度打破行的最简单方法是覆盖脚本顶部的Out-Default的默认实现,如下所示:

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

答案 1 :(得分: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
}

它只是在主机的RawUI输出缓冲区上设置了500个字符的新宽度(但是,因为我们在几个环境中运行我们的构建,并且我们不希望脚本失败只是因为它无法使输出更大,代码是相当防守的。)

如果你在一个总是设置RawUI的环境中运行(大多数都这样做),代码可以大大简化:

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