PowerShell 的新手,试图找到为 IP 列表提供此输出的内容

New to PowerShell, trying to find something that gives this output for a list of IPs

就像标题所说的那样,我是 PowerShell 的超级新手,我试图让 ping 到工作中不同 IP 和服务器的列表。

我在这里找到了这个脚本,它提供了我想要的东西(我稍微摸了一下):

$group = @()
    foreach ($ip in $Iplist) {
    $status = @{ "Servidor" = $ip; "Fecha" = (Get-Date -Format "dd/MM/yyyy HH:mm") }
$pings = Test-Connection $ip
    if ($pings) {
        $status["AverageResponseTime"] =
            ($pings | Measure-Object -Property ResponseTime -Average).Average
    $status["Estado"] = "OK"
}
    else {
        $status["Estado"] = "Down"
}

        New-Object -TypeName PSObject -Property $status -OutVariable serverStatus
        $group += $serverStatus

}

这一个的输出是这样的:

Estado Fecha            AverageResponseTime Servidor
------ -----            ------------------- --------
OK     03/09/2021 22:58                5.25 IP 1
OK     03/09/2021 22:58               33.75 IP 2
OK     03/09/2021 22:58                 5.5 IP 3

但我想得到这样的输出:

------   --------        -------------------    ---   ---  --------
IP1     03/09/2021 22:58                5.25    4ms   6ms      OK
IP2     03/09/2021 22:58               33.75    25ms  40ms     OK    
IP3     03/09/2021 22:58                 5.5    4ms   6ms      OK

老实说,我不知道如何得到它。如果有人有 advice/line 我将不胜感激。

有序哈希表

这是由于 PowerShell 不强制对哈希表的键进行排序。更多信息在这里:https://devblogs.microsoft.com/scripting/use-powershell-to-create-ordered-dictionary/

要修改您的代码以强制执行该命令,请更改此行,添加 ordered 属性标记:

$status = [ordered]@{ "Servidor" = $ip; "Fecha" = (Get-Date -Format "dd/MM/yyyy HH:mm") }

这意味着您的密钥将按照您指定的顺序排列。添加新键时,它们将保留在哈希表的末尾。创建输出对象之前的最终密钥将是:

  1. 服务器
  2. 费查
  3. 平均响应时间
  4. 国家

我想这就是你想要的。

Select-对象

另一种执行命令的方式,仅用于显示目的是 Select-Object cmdlet。例如,在您的情况下,您可以通过按顺序列出命名属性来按选择的顺序打印数据:

$group | Select-Object Servidor, Fecha, AverageResponseTime, Estado

再次通过管道传输到类似 Export-Csv 的内容将创建一个输出文件,其中的键按指定的顺序排列。