たとえば、プロセス スレッドを見ると、次のようになります。
PS C:\> (Get-Process)[0] | Format-List -Property Threads
Threads : {1548, 1600, 15940, 13996}
しかし、実際にそのプロパティを直接取得すると、次のようになります。
PS C:\> (Get-Process)[0].Threads
BasePriority : 8
CurrentPriority : 9
Id : 1548
IdealProcessor :
PriorityBoostEnabled :
PriorityLevel :
PrivilegedProcessorTime :
StartAddress : 8790537024736
StartTime :
ThreadState : Wait
TotalProcessorTime :
UserProcessorTime :
WaitReason : UserRequest
ProcessorAffinity :
Site :
Container :
BasePriority : 8
... etc
フォーマット リストには、オブジェクトをインテリジェントに要約する方法があることは明らかです。オブジェクトのリストを取得し、それぞれから代表的なプロパティを引き出して、短い配列として表示しました。オブジェクトのコレクションを同じ方法で要約できるメソッドまたはコマンドレットが見つかりません。
オブジェクトの任意のコレクションをメソッドに渡して要約できるようにしたいと考えています。これは、Exchange オブジェクトに電子メール アドレスを一覧表示する場合、AD オブジェクトにグループを一覧表示する場合、および他の多くの場所で使用されます...これらはすべて特殊なケースではないと思います。
拡張するには (@JoelSmith のコメントから詳細を学んだ後):
.NET オブジェクトには、出力をフォーマットするときに Powershell によって使用されるフォーマット定義があります。追加の詳細は[1]を使用して入手できます。これらの定義は一般的で、任意のコマンドでアクセスできますが、既定では、Powershell には、オブジェクト プロパティの出力を Format-List に表示されるように直接取得する関数はありません。help about_Format.ps1xml
ハック的な回避策の 1 つは、次のように出力を分割して削除することです。
(Get-Mailbox user | Format-List -Property Languages | Out-String).Split(':')[1].Trim()
# => {en-US,fr-CA}
ただし、この方法は非常に壊れやすく、出力が複数行にまたがったり、出力にコロンが含まれていると失敗します。
(Get-Mailbox user | Format-List -Property EmailAddresses | Out-String).Split(':')[1].Trim()
# => {smtp
必要なのは、オブジェクトに定義されたフォーマット定義を読み取って直接取得し、それを使用して目的の文字列を出力するメソッドです。オンラインで例を見つけることができませんでした。