调用数组中对象的属性

Calling properties of objects in an array

提问人:ThePostMan 提问时间:11/9/2023 更新时间:11/9/2023 访问量:26

问:

我不确定我的术语是否正确,但我希望能够创建一个 IP 地址对象的数组\列表\哈希表,用于存储 IP 地址和稍后要引用的设备的序列号。我目前有这个,但正在寻找建议:

$IPArray = [collections.arraylist](Get-Content <FilePath>})
$PCArray = @()

$PCInfo = foreach ($PCIP in $IPArray)
{
    #HN
    $PCHN = [System.Net.Dns]::GetHostByAddress($PCIP).hostname
    #SN
    $PCSN = $PCHN.split('\.')[0]

    $TempArray = [pscustomobject]@{
        "IP" = $PCIP
        "SN" = $PCSN}

    $PCArray += $TempArray
}
Clear-Host
$PCArray | Where IP -eq <IPofSN> | Select -ExpandProperty SN

这为我提供了我想要的设备的 SN,还允许我将数组显示为表格,但是我如何操作它以这种方式调用它:$PCInfo

$PCArray.$PCIP.SN$PCArray.$PCIP.IP

我似乎无法弄清楚如何做到这一点,并且上述尝试与我能够在这里使用 googlefu 和线程一样接近。

目前,我正在多个工作流程中解析 HN 和 SN,宁愿只解析一次并将其存储在对象/数组中以备将来参考并减少重复操作。

PowerShell 对象

评论


答:

2赞 Mathias R. Jessen 11/9/2023 #1

创建一个哈希表来存储每个自定义对象,然后将每个自定义对象添加到表中,并将 IP 作为入口键

$IPAddresses = Get-Content <FilePath>
$PCTable = @{}

foreach ($PCIP in $IPAddresses) {
    $PCHostname = [System.Net.Dns]::GetHostByAddress($PCIP).hostname
    $PCSerialNumber = $PCHostname.Split('.')[0]

    $PCTable[$PCIP] = [pscustomobject]@{
        "IP" = $PCIP
        "SN" = $PCSerialNumber
    }
}

现在,您可以通过索引到哈希表中来访问与给定 IP 关联的序列号:

$PCTable['10.10.10.123'].SN # gives you the SN value for the IP 10.10.10.123 (if present)

评论

0赞 ThePostMan 11/10/2023
这奏效了!谢谢你。我知道我已经很接近了,我只是无法弄清楚让它工作的语法。我唯一要提到的是,它将不再输出表,但会输出。再次感谢!$PCTable$PCTable.values
1赞 Mathias R. Jessen 11/10/2023
@ThePostman 没错。您还可以使用:)获取所有条目(包括关联的密钥)$entries = $PCTable.GetEnumerator() |% {$_}