【问题标题】:Powershell output column widthPowershell 输出列宽
【发布时间】:2009-06-11 00:32:25
【问题描述】:

如果我有一个可执行文件 out.exe 并且它的 stdout 被重定向到一个文件, 即:

out.exe > $file

现在如果我这样做,它只会输出:

<-----------------------------> 
80 columns per line to the file

有没有办法让标准输出的控制台列数更宽? 是out.exe 在某种程度上弄乱了列吗? 就我而言,我使用的是fxcopcmd.exe

【问题讨论】:

  • 我想更新这个问题。事实证明,我试图输出到 Visual Studio 输出窗口.. 但它以 80 个字符包装的窗口.. 有没有办法将它设置为更宽?

标签: powershell console


【解决方案1】:

不久前我遇到了类似的问题。这是我为修复它所做的:

# 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)

【讨论】:

  • 从 Visual Studio 构建步骤调用 PowerShell 时不要这样做。好像挂了PowerShell.exe。
  • 在设置尺寸时要小心,因为将其中一个尺寸设置为较小的值会导致脚本出错。这篇关于该主题的较旧博客文章让我有些头疼 - weblogs.asp.net/soever/archive/2008/12/09/…(FWIW 我的评论接近底部)
  • 我在 TFS 构建后脚本中使用了完整的解决方案,用于使用新的 TFS 2012 模板进行构建。它完全按照宣传的方式工作。谢谢!
  • 我使用人工包装的日志文件已经太久了。谢谢。
  • @kkuilla 问一个新的 StackOverflow 问题 :) 但我会告诉你,你可以通过设置自己的 PowerShell profile
【解决方案2】:

out-fileout-string cmdlet 都有一个 width 参数:

out.exe | out-file -width 132 -filePath $file

【讨论】:

  • 但如果 exe 决定只输出 80 个字符,这将无济于事。
  • out-file 确实有效,也许你有一些输出字符串?那么你还必须设置它的宽度
【解决方案3】:

如果您在谈论 Windows PowerShell - 只需打开“属性 > 布局”增加缓冲区大小 + 窗口大小

【讨论】:

  • 哪个对应列宽?
  • @Jaja 屏幕缓冲区大小宽度是每行中字符单元格的数量。宽度尺寸越大,换行前同一行中显示的文本就越多。
【解决方案4】:

我知道此时这是一篇相当老的帖子,但我想我会将我的 2 美分投入到那些偶然发现这篇文章以备将来使用的人身上。从它的声音来看,OP 正在尝试增加控制台窗口的大小,以便不会换行。我用来解决这个问题的典型解决方案:

$Width = $host.UI.RawUI.MaxPhysicalWindowSize.Width
$host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.size($Width,2000)

这应该会打开您的输出文件,以避免包装,并且不会创建与 -Stream(如果正在使用)的冲突。

编辑:这个命令实际上只需要旧版本的 PS(低于 7.1)。最新版本应该能够在 Out-String/File 之后仅使用 -Width 500。

【讨论】:

    【解决方案5】:

    在我的 powershell 脚本中,我将第一行设置为不执行回车 第二行我手动做了一个返回。

    (循环内)

    Write-Host -nonewline "$var1;$var2"
    
    Write-Host "`r"
    

    这解决了我的线路被换行但在每条记录后仍然返回的问题。

    【讨论】:

    • 我认为手头的问题是增加 VS 中输出窗口的宽度......这似乎不能正确回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2022-10-20
    • 2023-03-15
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多