2013-04-03 4 views
4

У меня есть объект массива $ a, который возвращает вывод, как показано ниже.Удаление элемента из массива объектов в Powershell

Suppose $a returns this

И делая $ а [0] .Name я могу получить доступ к каждой записи "Name", $ а [0] Я могу Имеюийся получить доступ к его свободному пространству.

У меня есть еще один массив: $ b, который содержит некоторые имена, скажем, $ b возвращает мне два имени «sandeep_aggr1» и «aggr4». Это просто массив (никаких свойств, таких как Name, Avaiable), а не объект, поэтому он не может использовать Compare-Object.

Я хочу удалить другие записи в исходном объекте $ a, кроме тех, у которых «Имя» равно «sandeep_aggr1» и «aggr4».

Это то, что я делаю.

foreach($bb in $b) 
    { 
      foreach($aa in $a) 
      { 
       if($aa.Name -ne $bb) 
       { 
        $aa.Remove($aa.Name) 
       } 

      } 


    } 

    echo $a 

Но, я не вижу, что элементы удалены, я чего-то не хватает? Любая помощь приветствуется

ответ

7

Если я правильно читает вопрос, это должно работать:

$a = $a | where {$b -contains $_.Name} 
+0

Спасибо, не ожидал, что это так просто с помощью трубы. Работает точно так, как ожидалось. – Sandeep

1

Я была такая же проблема, и она не работает, если $ а станет массив с одним элементом. Powershell потерял тот факт, что $ a является массивом. Это было очень проблематично, потому что я сразу использовал конверсию JSON.

Я просто добавил бросок:

$a = [array]($a | where {$b -contains $_.Name}) 
Смежные вопросы