【问题标题】:Remove blank lines from the output从输出中删除空行
【发布时间】:2019-02-04 06:53:43
【问题描述】:

我有这个脚本:

for ( ; $true ; )
{
    Write-Host ""
    Get-Date -UFormat "%Y-%m-%d %H:%M:%S"
    ping -n 1 10.10.50.203 | Select-String -SimpleMatch "Pinging" -Context 1,2
    ping -n 1 10.10.50.201 | Select-String -SimpleMatch "Pinging" -Context 1,2
    timeout 5 > null
}

它产生这个输出:

2018-08-29 14:40:49


> Pinging 10.10.50.203 with 32 bytes of data:
  Request timed out.


> Pinging 10.10.50.201 with 32 bytes of data:
  Reply from 10.10.50.201: bytes=32 time=58ms TTL=126

2018-08-29 14:40:54

> Pinging 10.10.50.203 with 32 bytes of data:
  Request timed out.


> Pinging 10.10.50.201 with 32 bytes of data:
  Reply from 10.10.50.201: bytes=32 time=58ms TTL=126

我们需要它没有空行:

2018-08-29 14:40:49
> Pinging 10.10.50.203 with 32 bytes of data:
  Request timed out.
> Pinging 10.10.50.201 with 32 bytes of data:
  Reply from 10.10.50.201: bytes=32 time=58ms TTL=126

2018-08-29 14:40:54
> Pinging 10.10.50.203 with 32 bytes of data:
  Request timed out.
> Pinging 10.10.50.201 with 32 bytes of data:
  Reply from 10.10.50.201: bytes=32 time=58ms TTL=126

我正在尝试来自 thisthis 问题的解决方案,但没有任何帮助。

尤其是| ForEach-Object { $_.Trim() } 解决方案会产生此错误消息:

...不包含名为“Trim”的方法。

PS版:

PS C:\WINDOWS\system32> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17134.165
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17134.165
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

【问题讨论】:

  • 由于您使用的是 PowerShell,请尝试更改您的脚本以使用 PowerShell 命令 Test-NetConnection 而不是 ping。它将返回一个可用的 PowerShell 对象。

标签: powershell output


【解决方案1】:

这很好用。

for ( ; $true ; )
{
    Write-Host ""
    Get-Date -UFormat "%Y-%m-%d %H:%M:%S"
    (ping -n 1 www.google.com | Select-String -SimpleMatch "Pinging" -Context 1,2 | Out-String).Trim()
    (ping -n 1 www.google.co.in | Select-String -SimpleMatch "Pinging" -Context 1,2 | Out-String).Trim()
    timeout 5 > null
}

输出:

2018-08-29 18:42:10
> Pinging www.google.com [216.58.197.36] with 32 bytes of data:
  Reply from 216.58.197.36: bytes=32 time=21ms TTL=53
> Pinging www.google.co.in [216.58.197.35] with 32 bytes of data:
  Reply from 216.58.197.35: bytes=32 time=15ms TTL=57

【讨论】:

  • 完美!谢谢你。由于缺少声誉而无法投票:-(我会尽快接受!
【解决方案2】:

尤其是 | ForEach-Object { $_.Trim() } 解决方案会产生此错误消息:

...不包含名为“Trim”的方法。

我猜那是因为你没有使用

out-string | 

在 ForEach 之前?

*some-command* | out-string | ForEach-Object { $_.Trim() }

【讨论】:

    【解决方案3】:

    您也可以使用-replace "`n",'' 删除空行。这在想要保留空格时特别有用,例如Trim() 方法将删除的缩进行。通常不需要Out-Stringeiher。

    在本例中,代码为:

    for ( ; $true ; )
    {
        Write-Host ""
        Get-Date -UFormat "%Y-%m-%d %H:%M:%S"
        (ping -n 1 10.10.50.203 | Select-String -SimpleMatch "Pinging" -Context 1,2) -replace "`n",''
        (ping -n 1 10.10.50.201 | Select-String -SimpleMatch "Pinging" -Context 1,2) -replace "`n",''
        timeout 5 > $null
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多