Select 数组中数组的特定值

Select specific values from an array within an array

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

$global:Xtrem_HBA_list = @()
$global:Xtrem_HBA_list += Get-XtremInitiators -Properties name,port-address,ig-id
$Write-Host $global:Xtrem_HBA_list

这个returns

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 来包含来自名称、端口地址的值和来自 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]}}
}

几个基本的方法来获得它。

  • 每次通过都从数组中提取值的循环。
  • 一个循环,它使用 Add-Member 创建另一个 属性 'extracts' 信息并使用 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 语句轻松强化它。