【问题标题】:Select specific values from an array within an array从数组中的数组中选择特定值
【发布时间】:2016-04-17 20:53:33
【问题描述】:

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

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

【问题讨论】:

  • 它会总是是第二个值吗?

标签: arrays powershell powershell-2.0 powercli


【解决方案1】:

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

  • 一个循环,每次从数组中提取值。
  • 使用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 语句轻松地强化它。

【讨论】:

  • 使用计算属性的好主意!我忘记了那些。 $global:Xtrem_HBA_list | % {[PSCustomObject]@{Name=$_.Name;PortAddress=$_."port-address";IGID=$_."ig-id"[1]}}
  • @MadTomVane 我唯一要说的是,当您只需要更改/添加一个属性时,创建一个全新的对象似乎很奇怪。不确定在某个时候是否存在性能折衷。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
相关资源
最近更新 更多