PowerShell でハッシュ テーブルを CSV にエクスポートする

例えば以下のようにハッシュ テーブルを作ったとき、CSV ファイルにエクスポートしたいとします。

$Hashtable = @{"AAA" = 123; "BBB" = 456; "CCC" = 789}

パイプで Export-Csv に渡せばいいと思われますが、やってみれば分かる通りそれではきちんと出力されません。そこで、以下のようにします。

$Hashtable.GetEnumerator() | Select @{N="Col1"; E={$_.Key}}, @{N="Col2"; E={$_.Value}} | Export-Csv .Desktopfile.csv -Encoding Default -NoTypeInformation

GetEnumerator() で型を変えて Select で整形してから、Export-Csv に渡します。Select は Key と Value を取得すればデータとしては問題ないですが、CSV にするときにヘッダーをあらかじめ指定しておいたほうがラクなので Select で指定してしまいます。「N」は「Name」の、「E」は「Expression」の略です。

これを応用すれば、Exchange サーバーのメッセージ追跡ログを Get-MessageTrackingLog で取得して Export-Csv したときに Recipients が出力されない問題も解決します。「Select {$_.Recipients}」のような感じにしてあげれば大丈夫ですね。