我有以下情况:
$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}}
“@{...}
”符号表明(在我看来)它将结果返回到散列图而不是数组中。更糟糕的是,每个结果元素似乎也作为键值对返回?
我做错了什么?
答案 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})) }