例えば以下のようにハッシュ テーブルを作ったとき、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}」のような感じにしてあげれば大丈夫ですね。