从数组中的数组中选择特定值

时间:2016-01-13 02:10:28

标签: arrays powershell powershell-v2.0 powercli

我正在查询我的存储阵列以收集启动器的属性。这是代码:

$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]}}
}

1 个答案:

答案 0 :(得分:2)

结合基本方式。

  • 在每次传递时从数组中提取值的循环。
  • 使用Add-Member创建另一个“提取”信息并使用Select拉取该列的属性的循环。
  • 使用calculated property输出ig-id列,但只输出数组中的第二个值。这个也更容易,因为它会让我们使用相同的名称。

我选择了后一个建议。我没有故意使用write-host,因为默认情况下它会转到输出流,而write-host只会转到控制台

$global:Xtrem_HBA_list |  Select name,port-address,@{Name="ig-id";Expression={($_."ig-id")[1]}}

请注意,如果少于两个元素,则返回null。在同一场景中,它可能会产生错误,具体取决于您的严格模式。您的里程会有所不同,但如果需要,您可以通过一些if语句轻松加强。