Format-List コマンドの結果をプロパティの名前でならべかえる

Get-Mailbox などのコマンドの実行結果を fl (Format-List) で出力すると各プロパティが表示されますが、もしかするとこれをアルファベット順で表示させたいという状況があるかもしれません。
こんな時はこちらのぺージを参考にするとよいでしょう。

ただしこの方法ではもともと表示されていた以下の情報が表示されません。

  • PSComputerName
  • PSShowComputerName
  • RunspaceId

これらはリモート PowerShell 接続に関する内容のため、特に意識する必要はない情報ですが、もし必要ということであれば Get-Member コマンドで Propery だけでなく NoteProperty も一緒に取得すれば表示されるようになります。例えばこんな具合です。

1
2
$temp = Get-Mailbox ExoUser01
$temp | Format-List ([string[]]($temp | Get-Member | ?{$_.MemberType -like "*Property"} | %{ $_.Name } | Sort-Object))

さらに Format-List のようにパイプで値を受け取ったり、表示するプロパティをアスタリスクで絞り込みもできるようにしたり改良を加えたのが、以下の Format-SortedList コマンドです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Format-SortedList {
    param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [Object]$InputObject,
 
        [Parameter(Mandatory=$false,ValueFromPipeLine=$false,Position=1)]
        [String[]]$Property
    )
 
    if ($Property -ne $null) {
        $InputObject = ($InputObject | select $Property)
    }
 
    $InputObject | Format-List ([string[]]($InputObject | Get-Member | ?{$_.MemberType -like "*Property"} | %{ $_.Name } | Sort-Object))
}

以下のように利用できます。