【问题标题】:Test-Connection output in realtime without spacing无间隔的实时测试连接输出
【发布时间】:2015-11-05 15:12:54
【问题描述】:
Test-Connection PCNAME -count 6 | ft address, ipv4address, responsetime

我正在尝试使用上述命令编写一个命令来测试设备的连接(ping),但是,当我运行它时,它会在每列之间输出巨大的间距。我总是可以将-AutoSize 添加到该命令的末尾,但是在完成之前输出不会显示在屏幕上,这违背了命令的目的。有没有不带间距的实时输出结果的方法?

【问题讨论】:

    标签: powershell format output


    【解决方案1】:

    这对我有用。你只需要给format-table一些更合适的宽度:

    try {
    Test-Connection blah -count 6 -ErrorAction Stop | ft @{Name='address';Expr={$_.address};width=10},
                                            @{Name='ipv4address';Expr={$_.ipv4address};width=12},
                                            @{Name='responsetime';Expr={$_.responsetime};width=15} 
    
    } catch [System.Net.NetworkInformation.PingException]  {
      write-output 'request timed out'
    }
    

    编辑:为响应超时添加了 try/catch。

    【讨论】:

    • 您知道一种模仿常规 ping 的“请求超时”功能的方法吗?如果它 ping,那么在运行期间不会显示“超时”?
    • 它不会像你建议的那样工作,但中间会失败。它会在超时时停止。
    【解决方案2】:

    不,没有办法做到这一点。正如您所发现的,AutoSize 需要所有项目才能计算出列的大小,然后进行渲染。

    当您只是在 ping 连接时,表格的格式是否有那么大的问题?

    注意:您始终可以使用 ForEach-Object 自己格式化输出,使其看起来更像 ping 式:

    Test-Connection PCNAME -count 6 | % {Write-Host "Reply from $($_.IPV4Address): bytes=$($_.BufferSize) time=$($_.ResponseTime) TTL=$($_.ResponseTimeToLive)"}
    

    【讨论】:

    • 是的,我想把它组合成一个工具在工作中使用,当解决 PC 的连接问题时,需要实时查看 ping。
    • @Aaron - 我添加了一个示例,说明如何使用 Test-Connection 提供更像 ping 的输出
    猜你喜欢
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多