質問: $test2 | select -Property *,d,e,f $test2 <# 出力ビュー A : 1 B : 2 C : 3 d : e : f : A : 1 B : 2 C : 3 d : e : f : #> ``` ### 試したこと 一応 Format-Table を試してみました 出力ビューは元に戻るのですが型が変わってしまうので Psobjectにキャストできないか試したのですが出来ませんでした。 ### 補足情報(FW/ツールのバージョンなど) Win10 PSVersion : 5.1.17763.134
回答: こんにちは。 PowerShellにおいて、PSCustomObjectなどの予め表示書式が定まっていないオブジェクトはそのプロパティ数が4個以下の場合はTableフォーマットを、5個以上になる場合はListフォーマットを取ります。 これはそういう仕様であり、この4という閾値を変更することは不可能ではないのですが、通常はしませんし私もお勧めしません。 細かい話は弊ブログの以下の記事をご覧ください。 * PowerShell既定のフォーマット設定に介入する方法について 補足 === PowerShellにおける基本的な思想について補足しておきます。 PowerShellは.NET Framework/.NET Coreのオブジェクトを扱うシェルであり、どの様な表示形式を取ろうがオブジェクトのプロパティやメソッドは存在しており正しく処理を行うことが可能です。 コンソールにおける表示は処理の"最終結果"でしかありません。 このため`Format-*`や`Out-*`なコマンドレットは処理の最後にパイプする前提となっています。 (例外として`Out-String`だけは後続処理に文字列を引き渡すこと前提となっています) ですのでご質問のケースでは ``` $test2 | (なんらかの後処理) | Format-Table ``` の様にして最後にTable表示にするのがPowerShellとしてあるべき形となります。 こちらについても細かい話は弊ブログの以下の記事をご覧ください。 * CLR/H #clrh99 ~サクラサク~ でPowerShellについて話してきました