从Powershell中的对象数组中删除项目

时间:2013-04-03 17:57:24

标签: powershell powershell-v2.0

我有一个数组对象$ a,它返回如下所示的输出。

Suppose $a returns this

通过执行$ a [0] .Name我可以访问每个“Name”条目,$ a [0]。可以访问其相应的可用空间。

我有另一个数组说$ b包含一些名字,比如说$ b给我两个名字“sandeep_aggr1”和“aggr4”。这只是一个数组(没有Name,Avaiable等属性),不是对象,所以它不能使用Compare-Object。

我想删除原始对象$ a中的其他条目,但“Name”等于“sandeep_aggr1”和“aggr4”的条目除外。

这就是我在做的事。

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

          }


    }

    echo $a

但是,我没有看到删除的元素,我在这里遗漏了什么?  任何帮助表示赞赏

2 个答案:

答案 0 :(得分:9)

如果我正确地阅读了这个问题,这应该有效:

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

答案 1 :(得分:1)

我遇到了同样的问题,如果$ a成为只有一个元素的数组,它就无法工作。 Powershell松散了$ a是一个数组的事实。这是非常有问题的,因为我之后使用了JSON转换。

我刚刚添加了一个演员:

$a = [array]($a | where {$b -contains $_.Name})