2016-01-13 3 views
0

Я запрашиваю массив хранения для сбора свойств для инициаторов. Вот код:Выберите определенные значения из массива в массиве

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

Моя проблема заключается в том, что мне нужно $ глобальный: Xtrem_HBA_list содержать значение от имени, порт-адрес и второе значение от lg-идентификатор (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

Будет ли это _always_ быть вторым значением? – Matt

ответ

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

Обратите внимание, что если есть меньше, чем два элемента нуль будет возвращен. В этом же сценарии он может генерировать ошибку в зависимости от вашего строгого режима. Ваш пробег будет отличаться, но вы можете легко ожесточить его, если будут какие-то заявления.

+0

Я не могу проверить это, но теоретически он должен работать. – Matt

+0

Отличная идея с использованием рассчитанного свойства! Я забыл о них. '$ global: Xtrem_HBA_list | % {[PSCustomObject] @ {Name = $ _. Name; PortAddress = $ _. "Port-address"; IGID = $ _. "Ig-id" [1]}} ' –

+0

@MadTomVane Единственное, что я должен сказать об этом кажется странным создание целого нового объекта, когда вам нужно только изменить/добавить одно свойство. Не уверен, что в какой-то момент есть компромисс. – Matt