为数组中的所有项选择单个属性

时间:2012-05-31 08:57:06

标签: arrays powershell

我有以下情况:

  • $catalogitems定义了CatalogItem的集合。
  • 每个CatalogItem定义了一个名为Policies的NoteProperty,其中包含Policy个实例的集合。
  • 每个Policy都有一个System.String类型的属性GroupUserName

我的问题是,我如何按照CatalogItem的方式按下每个CatalogItem的{​​{1}}数组(即没有额外的GroupUserName Policy它们之间的对象步骤)?

我尝试了以下内容:

$catalogitems | Select-Object @{Name="GroupUserNames"; Expression = {($_ | Select-Object -ExpandProperty Policies | Select-Object GroupUserName)}}

这似乎不是正确的方法,因为它返回的结果如下:

@{GroupUserName=BUILTIN\Administrators}
{@{GroupUserName=BUILTIN\Administrators}, @{GroupUserName=MYMACHINE01\Administrator}}

@{...}”符号表明(在我看来)它将结果返回到散列图而不是数组中。更糟糕的是,每个结果元素似乎也作为键值对返回?

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我仍然不太确定我是否理解你的物体是什么样的,以及你想从中得到什么,但可能会有如下情况:

$catalogitems | ForEach-Object {
  $_ | Add-Member -PassThru NoteProperty GroupUserNames (@(
    $_ | Select-Object -ExpandProperty Policies |
         Select-Object -ExpandProperty GroupUserName
  ))
}

可以缩短(在shell中,不建议在脚本中)到

$catalogitems | %{ $_ | Add-Member -p NoteProperty GroupUserNames (@($_|%{$_.Policies}|%{$_.GroupUserName})) }