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") }
这意味着您的密钥将按照您指定的顺序排列。添加新键时,它们将保留在哈希表的末尾。创建输出对象之前的最终密钥将是:
- 服务器
- 费查
- 平均响应时间
- 国家
我想这就是你想要的。
Select-对象
另一种执行命令的方式,仅用于显示目的是 Select-Object
cmdlet。例如,在您的情况下,您可以通过按顺序列出命名属性来按选择的顺序打印数据:
$group | Select-Object Servidor, Fecha, AverageResponseTime, Estado
再次通过管道传输到类似 Export-Csv
的内容将创建一个输出文件,其中的键按指定的顺序排列。
就像标题所说的那样,我是 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") }
这意味着您的密钥将按照您指定的顺序排列。添加新键时,它们将保留在哈希表的末尾。创建输出对象之前的最终密钥将是:
- 服务器
- 费查
- 平均响应时间
- 国家
我想这就是你想要的。
Select-对象
另一种执行命令的方式,仅用于显示目的是 Select-Object
cmdlet。例如,在您的情况下,您可以通过按顺序列出命名属性来按选择的顺序打印数据:
$group | Select-Object Servidor, Fecha, AverageResponseTime, Estado
再次通过管道传输到类似 Export-Csv
的内容将创建一个输出文件,其中的键按指定的顺序排列。