PowerShellの出力表示の「…」や改行をいい感じにしたい

どうも、Tです。

先日(数時間前)から、まともにPowerShellのお勉強を始めましたが、出力部分で色々不満に思うことがあったので改善方法を探してみました。

vSphere7環境をコマンド操作するためにVMware PowerCLIを使ってみる
どうも、Tです。 vSphere環境をコマンドでごにょごにょする仕事がありそうなのでPowerCLIインストールしてみました。...
スポンサーリンク
アドセンス1

環境

  • PSVersion 5.1.17763.316

解決策まとめ

とりあえず自分用に先に結果だけまとめ。

問題 原因 解決方法
表示が省略 出力形式により強制省略 | Format-Table -AutoSize -Wrap
要素が省略 デフォルト表示要素が4 $FormatEnumerationLimit = -1
ファイル出力時に改行 コンソールの横幅で出力 | Out-file -filepath sample.txt -width 10000

問題点

出力結果が省略される

とりあえず下記のコマンドを打ってみる(VMware PowerCLI入れてないと出ません)

自分がわかりやすいようにしているので、VMware*は外してください。

Get-Module VMware* -ListAvailable

ここで、2つの省略が発生している。

1つ目は左のほうで出力があるはずなのに、「…」で省略されている。

2つ目は右のほうで要素があるはずなのに、「…」で省略されている。

ファイル出力(リダイレクト)時に改行される

これは出力結果が省略される問題を解決した後にファイルへリダイレクトした際に発覚。

省略を解決したとに、下記のようにファイルへリダイレクトする。

Get-Module VMware* -ListAvailable | Format-Table -AutoSize -Wrap > test.txt

右端で強制的に改行されている。

解決方法

問題1:表示が長すぎて省略される

PowerShellでは、各プロパティで表示幅があるらしくそれを超えると「…」で省略されるもよう。ここで表示形式を設定することで省略を回避できる。

下記のような指定方法。

  • Format-Table表示形式を指定
  • AutoSizeで必要なデータ列幅を自動指定
  • Wrapで画面幅に収まらない場合に改行して表示させる
Get-Module VMware* -ListAvailable | Format-Table -AutoSize -Wrap

これで省略なく表示されるようになった。

-AutoSizeオプションをつけるとメモリを大量に消費するという内容をチラホラネットでみます。どの程度かはわかりませんが、大量表示に対して実施する場合はご注意ください。

問題2:要素が少なすぎて省略される

PowerShellでは{}で表示される要素はデフォルト4つに設定されており、5つ以降は省略される。

下記のコマンドを実行すると要素の表示数がわかる。

$FormatEnumerationLimit

デフォルト4になっている。

下記のコマンドで-1を指定することにより要素数の最大値がなくなる。

$FormatEnumerationLimit=-1

要素数の最大値をなくした状態で下記のコマンドを実行する。

Get-Module VMware* -ListAvailable | Format-Table -AutoSize -Wrap

これですべての要素が表示されるようになった。改行されているのはコンソールの画面幅が足りないため、改行されているから。

問題3:ファイル出力(リダイレクト)時に改行される

改行されてしまうのは、コンソールの画面幅(表示されている内容)をそのままファイルに出力しているから。

リダイレクトではなく、下記のようにOut-fileコマンドレットを使ってファイル出力する。width 10000で10000文字まで改行なしで出力できる。(最大値は、32bit整数の2147483647)

Get-Module VMware* -ListAvailable | Format-Table -AutoSize -Wrap | Out-file -filepath test.txt -width 10000

幅が長すぎるため右端までのスクリーンショットは割愛するが、これで改行されずに1行でファイル出力が行える。

参考

https://bizlog.tech/windows-powershell-format/
【PowerShell】出力形式を変更する[Format-List,Format-Table,Format-Wide] | Trend Desk
PowerShellのコマンドレットで標準出力に表示する際に表示形式を変更するコマンドレットについての解説です。「Format-List(fl)」「Format-Table(ft)」「Format-Wide(fw)」、あとFormatではないですが、「Select-Object *」もよく使用するコマンドレットです。
Format コマンドを使用した出力ビューの変更 - PowerShell
PowerShell の拡張可能な書式設定システムを使用すると、リスト、テーブル、またはカスタム レイアウトに出力を提供することができます。
PowerShellでファイルにリダイレクトしたときに勝手に改行される場合の対処 - Qiita
PowerShellでリダイレクトを使ってファイル出力すると、一定の長さ(PowerShellの画面バッファーの設定に依存するようです)で改行されてしまう。 例えば、テキストをフィルタリングして、別のファイルに書き出す次のようなコマ...

まとめ

PowerShell高機能なんだろうけど、使い勝手悪いなぁというの正直な感想・・・。

あとリファレンスもっとキレイに整備してほしい・・・・。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする