【问题标题】:Remove blank lines in powershell output删除 powershell 输出中的空行
【发布时间】:2015-11-22 00:46:54
【问题描述】:

我正在尝试在输出之前和之后删除空白行,但它不起作用。我尝试在第一个 Write-Host 之后添加 -NoNewLine,但到目前为止只删除了一个空行。

代码:

  $tag1 = "c91638"

    Write-Host "Operating System Information"


    $OSInfo = get-wmiobject -class win32_operatingsystem -computername $tag1 

    $OSInfo `
        | Format-List `
            @{Name="OS Name";Expression={$_.Caption}}, 
            @{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}}, 
            @{Name="OS Install Date";Expression={$_.ConvertToDateTime($_.InstallDate)}}; 

    Write-Host "Line test.."

输出:

Operating System Information


OS Name         : Microsoft Windows 7 Enterprise 
OS Boot Time    : 8/27/2015 2:05:35 AM
OS Install Date : 4/4/2014 11:39:15 AM



Line test..

我想做的事:

Operating System Information

OS Name         : Microsoft Windows 7 Enterprise 
OS Boot Time    : 8/27/2015 2:05:35 AM
OS Install Date : 4/4/2014 11:39:15 AM

Line test..

【问题讨论】:

  • 类似here 的东西我觉得很有帮助。

标签: powershell output


【解决方案1】:

试试这个:

($OSInfo `
    | Format-List `
        @{Name="OS Name";Expression={$_.Caption}}, 
        @{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}}, 
        @{Name="OS Install Date";Expression={$_.ConvertToDateTime($_.InstallDate)}}  `
    | Out-String).Trim()

这将清除Format-List 产生的所有无关空行。您可能需要插入几个您自己可以控制的。

【讨论】:

  • 我知道我忘记了什么...... Out-String。这样可行。我可以添加自己的空间。
  • 它还会修剪我不想要的前导空格。有什么想法吗?
  • @PatrickSzalapski 你的意思是前导和尾随新行而不是空格?
  • 不,当我只想修剪空白行时,它会修剪前导空格字符。
  • @PatrickSzalapski 我无法复制。您可以在imgur或其他地方发布屏幕截图。还有什么版本的 PowerShell?
【解决方案2】:

只是补充一句,因为我看到一直在这样做,即使是现在 - Format-ListFormat-Table 应该用于在控制台中输出文本。

如果您有对象要输出为文本文件、CSV 等,那么您只需 Select-Object 获取您想要的对象,而不是 ftfl。然后,如果需要文本格式,您可以申请 Out-String

上面的例子应该是:

($OSInfo `
| Select-Object `
    @{Name="OS Name";Expression={$_.Caption}}, 
    ... `
| Out-String).Trim()

【讨论】:

  • 我正在控制台中输出它,所以它也很好。感谢您的提示。
  • 这是什么原因?
  • 因为Format-ListFormat-Table 用于控制台中displayformatting 输出。要从管道中选择对象,您应该简单地 select 它们 - 这样您就不会处理格式背后发生的任何事情。如果您要导出为 CSV,格式化输出以在屏幕上显示就更没有意义了 - CSV 是您想要的格式。 Format-Table 完全是浪费时间 - Select,然后 Export-CSV 进行格式化。
【解决方案3】:

使用.Trim() 太过分了,因为它会删除前导和尾随空格以及空白行。如果你只想删除空行,试试这个,在任何导致字符串的代码之后,做:

$result.Trim("`r","`n")

或者对于许多字符串,例如在Format-Table 或类似之后:

$results | Format-Table | Out-String | ForEach-Object { $_.Trim("`r","`n") }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多