1

我有以下情况:

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

我的问题是,我如何CatalogItem以这样的方式按摩 s,使我得到每个sCatalogItem数组GroupUserName(即它们之间没有额外的Policy对象步骤)?

我尝试了以下方法:

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

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

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

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

我究竟做错了什么?

4

1 回答 1

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})) }
于 2012-05-31T09:03:21.677 回答