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 分配静态 IP 地址

在 Powershell 中,将两个表合并为一个的最佳方法是啥?

关于 Powershell DSC 和节点的新手问题

PowerShell中的Case Else

Powershell + Selenium 爬虫--代理(03)

如何通过powershell或C#使用本地IP远程更新azure SQL防火墙