PowerShell 新手,试图找到可以为 IP 列表提供此输出的内容
Posted
技术标签:
【中文标题】PowerShell 新手,试图找到可以为 IP 列表提供此输出的内容【英文标题】:New to PowerShell, trying to find something that gives this output for a list of IPs 【发布时间】:2021-11-02 05:35:27 【问题描述】:正如标题所说,我是 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
老实说,我不知道如何获得它。如果有人有任何建议/线路,我将不胜感激。
【问题讨论】:
【参考方案1】:有序哈希表
这是由于 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-Object
cmdlet,仅用于显示目的。例如,在您的情况下,您可以通过按顺序列出命名属性来按选择的顺序打印数据:
$group | Select-Object Servidor, Fecha, AverageResponseTime, Estado
再次连接到 Export-Csv
之类的东西会创建一个输出文件,其中包含指定顺序的键。
【讨论】:
不错,但又是术语:从句法上讲,[ordered]
是一个 cast,使用了一个虚构的 type literal。它是纯粹的 - 尴尬 - 语法糖,类似于 [pscustomobject] @ ...
(这也不是真正的演员表),尽管在后一种情况下,至少类型是这样存在的。以上是关于PowerShell 新手,试图找到可以为 IP 列表提供此输出的内容的主要内容,如果未能解决你的问题,请参考以下文章
在 Powershell 中,将两个表合并为一个的最佳方法是啥?