提问人:ThePostMan 提问时间:11/9/2023 更新时间:11/9/2023 访问量:26
调用数组中对象的属性
Calling properties of objects in an array
问:
我不确定我的术语是否正确,但我希望能够创建一个 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,宁愿只解析一次并将其存储在对象/数组中以备将来参考并减少重复操作。
答:
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() |% {$_}
评论