我正在查询我的存储阵列以收集启动器的属性。这是代码:
$global:Xtrem_HBA_list = @()
$global:Xtrem_HBA_list += Get-XtremInitiators -Properties name,port-address,ig-id
$Write-Host $global:Xtrem_HBA_list
返回
name port-address ig-id
---- ------------ -----
comp-esxi-01_vmhba2 10:00:00:90:fa:53:f4:60 {c832425d03f84644be37ae3d4e49186c, comp-esxi-01, 1}
comp-esxi-01_vmhba3 10:00:00:90:fa:53:f4:61 {c832425d03f84644be37ae3d4e49186c, comp-esxi-01, 2}
我的问题是我需要$ global:Xtrem_HBA_list来包含name,port-address和ig-id(comp-esxi-01)中的第二个值。我很难从数组中的数组中提取值。
感谢马特!我更新了我的代码,得到了我想要的确切输出。
$global:Xtrem_HBA_list = @()
$global:arr_HBAs = @()
$global:Xtrem_HBA_list += (Get-XtremInitiators).name
foreach ($i in $global:Xtrem_HBA_list){
$global:arr_HBAs += Get-XtremInitiator -InitiatorName $i | Select name,port-address,@{Name="ig-id";Expression={($_."ig-id")[1]}}
}
答案 0 :(得分:2)
结合基本方式。
Add-Member
创建另一个“提取”信息并使用Select
拉取该列的属性的循环。 ig-id
列,但只输出数组中的第二个值。这个也更容易,因为它会让我们使用相同的名称。 我选择了后一个建议。我没有故意使用write-host
,因为默认情况下它会转到输出流,而write-host
只会转到控制台
$global:Xtrem_HBA_list | Select name,port-address,@{Name="ig-id";Expression={($_."ig-id")[1]}}
请注意,如果少于两个元素,则返回null。在同一场景中,它可能会产生错误,具体取决于您的严格模式。您的里程会有所不同,但如果需要,您可以通过一些if语句轻松加强。