どうも、Tです。
先日(数時間前)から、まともにPowerShellのお勉強を始めましたが、出力部分で色々不満に思うことがあったので改善方法を探してみました。
環境
- 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
これで省略なく表示されるようになった。
問題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行でファイル出力が行える。
参考
まとめ
PowerShell高機能なんだろうけど、使い勝手悪いなぁというの正直な感想・・・。
あとリファレンスもっとキレイに整備してほしい・・・・。