1

次のような状況があります。

  • $catalogitemsのコレクションを定義しますCatalogItem
  • それぞれが特に、インスタンスのコレクションを含むCatalogItemと呼ばれる NoteProperty を定義します。PoliciesPolicy
  • それぞれにSystem.String 型Policyのプロパティがあります。GroupUserName

私の質問は、sの配列を使用してCatalogItemそれぞれを取得する方法で sをマッサージするにはどうすればよいですか(つまり、それらの間に追加のオブジェクトステップを追加せずに)。CatalogItemGroupUserNamePolicy

私は次のことを試しました:

$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
  ))
}

(シェルでは、スクリプトではお勧めできません) に短縮できます。

$catalogitems | %{ $_ | Add-Member -p NoteProperty GroupUserNames (@($_|%{$_.Policies}|%{$_.GroupUserName})) }
于 2012-05-31T09:03:21.677 に答える