【问题标题】:Combining several outputs into a table将多个输出组合到一个表中
【发布时间】:2019-02-18 11:42:32
【问题描述】:

使用 Powershell 我试图将三个命令的结果放入一个表中并将它们输出到一个文件中,然后永远重复该命令。我不知道如何正确格式化表格。

这是我的脚本

while (1){

    $ping = test-connection 8.8.8.8 -delay 1 -count 1
    $wifi = @{n='Status';e={get-netadapter -physical -name Wi-Fi | select Status}}
    $timestamp = @{n='TimeStamp';e={Get-Date}}

    $ping | format-table __SERVER, Address, ResponseTime, $timestamp, $wifi | out-file "C:\test-connection.txt" -append
    start-sleep -s 10
}

$ping 得到 8.8.8.8 的 ping 结果

$wifi 获取 wi-fi 适配器的状态

$timestamp 获取当前时间

最终的输出应该是这样的:

__SERVER  Address ResponseTime TimeStamp           Status      
--------  ------- ------------ ---------           ------      
Hostname  8.8.8.8           19 18/02/2019 10:19:23 Up
Hostname  8.8.8.8           19 18/02/2019 10:19:23 Up
Hostname  8.8.8.8           19 18/02/2019 10:19:23 Up
Hostname  8.8.8.8           19 18/02/2019 10:19:23 Up
...

但是,根据我当前的设置,它会这样做:

__SERVER  Address ResponseTime TimeStamp           Status      
--------  ------- ------------ ---------           ------      
Hostname  8.8.8.8           20 18/02/2019 10:19:13 @{Status=Up}



__SERVER  Address ResponseTime TimeStamp           Status      
--------  ------- ------------ ---------           ------      
Hostname  8.8.8.8           19 18/02/2019 10:19:23 @{Status=Up}



__SERVER  Address ResponseTime TimeStamp           Status      
--------  ------- ------------ ---------           ------      
Hostname  8.8.8.8           20 18/02/2019 10:19:33 @{Status=Up}

感谢任何帮助。

【问题讨论】:

  • 在 while 循环中,它一次捕获一个值。您需要在循环外捕获整个输出,或者您可以使用 arraylist 创建一个 psobject 并分别映射输出。

标签: windows powershell powershell-4.0


【解决方案1】:

您必须在后续写入时隐藏表头,并修剪输出。

试试这个:

while (1) {
    $ping = test-connection 8.8.8.8 -delay 1 -count 1
    $wifi = @{n='Status';e={get-netadapter -physical -name Wi-Fi | select -expand Status}}
    $timestamp = @{n='TimeStamp';e={Get-Date}}
    $path = "C:\test-connection.txt"
    $ping | ft __SERVER, Address, ResponseTime, $timestamp, $wifi -Hide:(Test-Path $path) | out-string | % {$_.trim()} | out-file $path -append
    start-sleep -s 10
}

使用Format-Table 进行文件输出虽然不是一个好主意,但它是为了在控制台中显示。考虑使用 CSV 或自定义格式。

【讨论】:

  • 非常好用,非常感谢,如果我以后再来这里,我会考虑使用 CSV,但现在这很好用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多