質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

730閲覧

配列のPsCostomObjectにプロパティを追加した際に 出力ビューが変わらないようにしたい

kamikazelight

総合スコア305

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2018/11/22 00:57

編集2018/11/22 04:14

前提・実現したいこと

配列のPsCostomObjectに select -propertyを使って
プロパティーを追加したのですがコンソールに出力したときのビューが
表形式出力 から リスト ビューに変わってしまいました。

出力ビューが変わったのでPsCostomObjectではなくなってしまったのではないかと思い
Gettype をつかって確認してみたのですが 問題はなく
追加前と同様に Array の中に PsCustomobject 入っていました。

一体何が変わってしまったのでしょうか?
又、それは元に戻すことは可能なのでしょうか?
教えて頂きたいです。

Add-Memberを使えば大丈夫なのは確認できましたが、
その地点では Value は 必要ないのに 省略不可能 だったり
コードが長くなるのが 若干気になるので
問題なければそのままselect -propertyを使いたいと思っています。

発生している問題

select -propertyを使って
プロパティーを追加すると
表形式出力 から リスト ビューに変わってしまう

該当のソースコード

powershell

1$test = @([PSCustomObject]@{A = 1;B=2;C=3},[PSCustomObject]@{A = 1;B=2;C=3}) 2$test 3<# 4出力ビュー 5A B C 6- - - 71 2 3 81 2 3 9#>

powershell

1#プロパティーの追加 2$test2 = @([PSCustomObject]@{A = 1;B=2;C=3},[PSCustomObject]@{A = 1;B=2;C=3}) 3$test2 = $test2 | select -Property *,d,e,f 4 5$test2 6<# 7出力ビュー 8A : 1 9B : 2 10C : 3 11d : 12e : 13f : 14 15A : 1 16B : 2 17C : 3 18d : 19e : 20f : 21#>

試したこと

一応 Format-Table を試してみました
出力ビューは元に戻るのですが型が変わってしまうので
Psobjectにキャストできないか試したのですが出来ませんでした。

補足情報(FW/ツールのバージョンなど)

Win10
PSVersion : 5.1.17763.134

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

PowerShellにおいて、PSCustomObjectなどの予め表示書式が定まっていないオブジェクトはそのプロパティ数が4個以下の場合はTableフォーマットを、5個以上になる場合はListフォーマットを取ります。

これはそういう仕様であり、この4という閾値を変更することは不可能ではないのですが、通常はしませんし私もお勧めしません。

細かい話は弊ブログの以下の記事をご覧ください。

補足

PowerShellにおける基本的な思想について補足しておきます。

PowerShellは.NET Framework/.NET Coreのオブジェクトを扱うシェルであり、どの様な表示形式を取ろうがオブジェクトのプロパティやメソッドは存在しており正しく処理を行うことが可能です。
コンソールにおける表示は処理の"最終結果"でしかありません。

このためFormat-*Out-*なコマンドレットは処理の最後にパイプする前提となっています。
(例外としてOut-Stringだけは後続処理に文字列を引き渡すこと前提となっています)

ですのでご質問のケースでは

$test2 | (なんらかの後処理) | Format-Table

の様にして最後にTable表示にするのがPowerShellとしてあるべき形となります。

こちらについても細かい話は弊ブログの以下の記事をご覧ください。

投稿2018/11/22 04:39

stknohg

総合スコア796

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamikazelight

2018/11/22 05:23

ありがとうございます。 プロパティー数で決まっていたのですね 検証時に横着をして Add-Member での確認取ったときに同じ数のプロパティーを追加していませんでした.... 詳しい説明で より理解が深まりました。 またよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問