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 有许多不同的方法可以操作输出。通过微软文档查看Format-Table的完整文档

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