PowerShell Format-Table:列で出力を整理する

PowerShellは、開発者の手をかなり助けてくれますが、心を読むことはできません。それはデフォルトの形式で最善の推測を提供しますが、最終的にはどのような出力を返すかはあなた次第です。PowerShellのFormat-Tableコマンドレットを使用すると、出力を自分の好みに調整することができます。

PowerShellには、デフォルトの出力とオブジェクトタイプごとに出力の形式を変更する能力を持つフォーマットシステムがあります。特定の方法で常に出力をフォーマットするためにXMLやその他の方法を学ぶことは望ましくない場合、PowerShell format-table、Format-ListFormat-Wideなどのコマンドレットも利用できます。ファイルシステム上のPS1XMLファイルまたはいずれかのフォーマットコマンドレットを使用すると、出力を異なる方法で表示することができます。

特別なフォーマットを使用せずに、デフォルトではPowerShellはその形式を使用します。特定のオブジェクトが返されると、実際のオブジェクトの内容の一部しか表示されません。たとえば、単一のフォルダを見るだけで、親ディレクトリといくつかの属性しか表示されません。

PS> Get-Item -Path C:\Windows\

Directory: C:\
Mode	LastWriteTime		Length	Name
---- 	------------- 		------	----

d-----	11/24/2017 9:57 AM 			Windows

しかし、同じコマンドをSelect-Object -Property *にパイプしてみてください。何が起こるかを見てみてください。

PS> Get-Item -Path C:\Windows\ | Select-Object -Property *

PSPath 				: Microsoft.PowerShell.Core\FileSystem::C:\Windows\
PSParentPath 		: Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName 		: Windows
PSDrive				: C
PSProvider 			: Microsoft.PowerShell.Core\FileSystem
PSIsContainer 		: True
Mode 				: d-----
BaseName 			: Windows
Target 				: {C:\Windows}
LinkType 			:
Name 				: Windows
FullName 			: C:\Windows\
Parent 				:
Exists 				: True
Root 				: C:\
Extension 			:
CreationTime 		: 3/18/2017 5:40:20 AM
CreationTimeUtc 	: 3/18/2017 11:40:20 AM
LastAccessTime 		: 11/24/2017 9:57:51 AM
LastAccessTimeUtc	: 11/24/2017 3:57:51 PM
LastWriteTime 		: 11/24/2017 9:57:51 AM
LastWriteTimeUtc 	: 11/24/2017 3:57:51 PM
Attributes 			: Directory

PowerShellは、通常、すべての情報を表示する必要はないため、オブジェクトの多くのプロパティを隠しています。PowerShellはデフォルトのビューを提供していますが、それが唯一のオプションではありません。フォーマットのコマンドレットを使用して、このビューを変更することができます。

最も人気のあるフォーマットのコマンドレットはFormat-Tableです。PowerShellのヘルプによれば、

Format-Tableコマンドレットは、各列にオブジェクトの選択したプロパティを持つテーブルとしてコマンドの出力をフォーマットします。オブジェクトのタイプによっては、デフォルトのレイアウトと表示されるプロパティが各列に表示されますが、Propertyパラメータを使用して表示したいプロパティを選択することができます。

また、ハッシュテーブルを使用して、オブジェクトを表示する前に計算されたプロパティを追加し、テーブルの列見出しを指定することもできます。計算されたプロパティを追加するには、PropertyパラメータまたはGroupByパラメータを使用します。

PowerShellのFormat-TableとSelect-Objectを使用して個々のオブジェクトプロパティを選択する場合、プロパティの値が現在のコンソールの幅を超えない限り、同じように見えます。しかし、多くのオブジェクトを表示しようとすると、Format-Tableは表形式のままであり、Select-Objectは各行にプロパティを表示する形式に戻ります。

PS> Get-Item -Path C:\Windows\ | Select-Object -Property LastAccessTime,Name,LastWriteTime,PSProvider,CreationTime

LastAccessTime 	: 11/24/2017 9:57:51 AM
Name 			: Windows
LastWriteTime 	: 11/24/2017 9:57:51 AM
PSProvider 		: Microsoft.PowerShell.Core\FileSystem
CreationTime 	: 3/18/2017 5:40:20 AM

PS> Get-Item -Path C:\Windows\ | Format-Table -Property LastAccessTime,Name,LastWriteTime,PSProvider,CreationTime

LastAccessTime			Name	LastWriteTime			PSProvider	CreationTime
-------------- 			---- 	------------- 			---------- 	------------
11/24/2017 9:57:51 AM 	Windows 11/24/2017 9:57:51 AM	Microsoft.PowerShell.Core\FileSystem	3/18/2017 5:40:20 AM

PowerShellのFormat-Tableの出力は常に表形式で情報を表示しようとします。プロパティの値が表示するには長すぎる場合、省略符号である省略記号で不足しているテキストを置き換え、追加の情報が利用可能であることを示しますが、表示されません。

Format-Table cmdletには、出力を操作するさまざまな方法があります。MicrosoftドキュメントでFormat-Tableの完全なドキュメントをチェックしてください。

Source:
https://adamtheautomator.com/powershell-format-table/