20

TFS から変更セットを一覧表示する Powershell コマンドレットを作成しています。TFS のクエリに成功し、変更セットのコレクションを取得しましたが、いくつかのプロパティのみを含む単純化されたオブジェクトを返したいと考えています。私はSelect-Objectこのようにそれを行うことができます...

$changesets | Select-Object ChangeSetId, Owner, Comment

最後に追加したいChangesプロパティは、変更の配列であるプロパティです。これらのオブジェクトも単純化したいと思います。私はこれを試していますが、私が望むものを返しません...

$changesets | Select-Object `
    ChangeSetId,
    Owner,
    Comment,
    @{Name="Changes"; Expression={ $_.Changes | Select-Object ChangeType, ServerItem }}

でネストされたコレクションを処理する方法はありSelect-Objectますか?

4

4 に答える 4

29

コマンドレット-ExpandPropertyのパラメーターを使用できます。Select-Objectコレクションを展開し、選択したプロパティを親オブジェクトから子オブジェクトに追加します。

$changesets | Select-Object ChangeSetId, Owner, Comment,
    @{Name="Changes"; Expression={ $_.Changes | Select-Object ChangeType, ServerItem }} |
Select-Object -Property * -ExcludeProperty Changes -ExpandProperty Changes
于 2016-03-02T12:37:58.207 に答える
9

式の構文が正しくありません。式とコード ブロックの間に等号 ("=") が必要です。

$changesets | Select-Object `
ChangeSetId,
Owner,
Comment,
@{Name="Changes"; Expression={ $_.Changes | Select-Object ChangeType, ServerItem }}

ネストされたオブジェクトを最上位の要素にしたい場合は、次のこともできます...

$changesets | Select-Object `
ChangeSetId,
Owner,
Comment,
@{Name="ChangeType"; Expression={ $_.Changes.ChangeType}},
@{Name="ServerItem"; Expression={ $_.Changes.ServerItem }}
于 2016-03-02T10:36:24.107 に答える
5

おそらく、内部コレクションをアンロールし、内部コレクション内の各アイテムに対して 1 回出力します。このようなもの(テストされていません):

$changesets | foreach-object {
  $changeSetItem = $_
  $changeSetItem.Changes | foreach-object {
    $changeItem = $_
    new-object PSObject -property @{
      "ChangeSetId" = $changeSetItem.ChangeSetId
      "Owner" = $changeSetItem.Owner
      "Comment" = $changeSetItem.Comment
      "ChangeType" = $changeItem.ChangeType
      "ServerItem" = $changeItem.ServerItem
    }
  }
}

明細書

于 2013-04-04T17:39:11.377 に答える