当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 格式表:综合指南

作者:精品下载站 日期:2024-12-14 21:37:35 浏览:15 分类:玩电脑

PowerShell 格式表:综合指南


作为 PowerShell 用户,您可能已经注意到默认输出格式可能难以阅读和解释。值得庆幸的是,PowerShell 提供了一个强大的命令 - Format-Table - 允许您以清晰简洁的方式格式化输出。在这份综合指南中,我将带您了解 PowerShell Format-Table 的详细信息,包括其优点、高级技术和要避免的常见错误。

PowerShell 格式表简介

在深入了解细节之前,让我们先从基础知识开始。 PowerShell Format-Table 是一个允许您以表格格式显示输出的命令。这使得读取、排序和过滤数据变得更加容易。该命令易于使用,并且可以自定义以满足您的特定需求。此外,它还允许自定义列宽、排序和显示计算值。

使用 PowerShell Format-Table 的最大优点之一是它简化了复杂的数据结构。例如,如果您有一个具有多个属性的复杂对象,则可能很难以默认格式读取输出。格式表允许您选择要显示的属性并以清晰简洁的方式设置它们的格式。

使用 PowerShell 格式表的好处

使用 PowerShell Format-Table 有几个好处。主要优点之一是它允许您自定义输出以满足您的特定需求。您可以选择要显示的属性、设置它们的格式,甚至调整列宽以适合您的数据。

使用 PowerShell Format-Table 的另一个优点是它可以更轻松地对数据进行排序和筛选。您可以按任何列对数据进行排序,并且可以使用 Where-Object 命令过滤数据。

PowerShell Format-Table 还允许您将输出导出到 CSV 文件,这对于与其他人共享数据或将其导入其他应用程序非常有用。

了解 PowerShell 输出到表

在我们深入了解 PowerShell Format-Table 的细节之前,了解 PowerShell 如何输出数据非常重要。默认情况下,PowerShell 将数据输出为一系列对象。这些对象可以具有不同的属性,可以使用 Get-Member 命令显示这些属性。

要以表格格式显示此数据,我们使用Format-Table命令。该命令允许我们选择要显示的属性,并以清晰简洁的方式设置它们的格式。基本语法如下:


Format-Table [-Property] <String[]> [-AutoSize] [-Wrap] [-RepeatHeader] [-GroupBy <Object[]>] [-HideTableHeaders] [-InputObject <PSObject>] [-Property <String[]>] [-Expand <String[]>] [-ShowError] [-DisplayError] [-View <TableControl>] [<CommonParameters>]

Format-Table cmdlet 包含多个参数,使您能够自定义输出数据。以下是重要参数的细分:

-Property

property 参数指定应在表中显示对象的哪些属性。

-AutoSize

自动调整列宽以适合数据。

-Wrap

使用 -Wrap 参数将列中的文本换行到下一行以适合列宽。

-GroupBy

该参数按指定属性对数据进行分组。

-HideTableHeaders

隐藏表格标题。

-InputObject

指定输入数据。

使用 PowerShell Format-Table 设置输出格式

现在我们了解了 PowerShell 输出和 Format-Table 的基础知识,让我们深入了解如何格式化输出的细节。 Format-Table 命令有多个选项,可让您自定义输出。

首先,让我们看一个基本示例。假设我们要列出计算机上具有某些属性的服务:


Get-service | select -Property Name, CanShutdown, CanStop, DisplayName, Status, StartType -First 5

这将列出指定的每个属性并创建列表格式的输出,如下所示:

[玩转系统] PowerShell 格式表:综合指南

然后,我们将数组通过管道传输到 Format-Table 并指定我们想要显示的属性。输出应如下所示:


Get-service | select -Property Name, CanShutdown, CanStop, DisplayName, Status, StartType -First 10 | Format-Table

[玩转系统] PowerShell 格式表:综合指南

从输出中选择特定列

您可以使用 Format-Table cmdlet 从上一个 cmdlet 的输出中选择特定列。举例来说,我们只想查看对象的选定属性,例如文件和文件夹的名称、上次修改时间、上次访问时间以及创建时间:


Get-ChildItem -Path C:\Windows\System32 | Format-table -Property Name, LastAccessTime,LastWriteTime,CreationTime

调整 PowerShell Format-Table 中的列宽

在某些情况下,默认列宽可能不足以显示您的数据。幸运的是,PowerShell Format-Table 允许您使用 -AutoSize 参数调整列大小。此参数调整列宽以最小化截断并在显示所有内容时使用尽可能小的宽度。当您处理长度不同的数据列并且希望查看尽可能多的数据而没有大量空白空间时,此功能特别有用。

例如,假设我们需要检索名称中以“Windows”开头的进程列表:


Get-Service -DisplayName Windows* | Format-Table

此代码检索包含三列的进程列表。但是,列中的某些文本会被截断以适合屏幕宽度。您还可以使用别名 FT。

[玩转系统] PowerShell 格式表:综合指南

我们可以将此输出传递给 Format-Table 并使用 -AutoSize 参数来调整列宽:


Get-Service -DisplayName Windows* | Format-Table -AutoSize

命令行上的输出应如下所示:

[玩转系统] PowerShell 格式表:综合指南

-AutoSize 参数会自动调整列宽以适合数据。这意味着具有较长数据的列将比具有较短数据的列更宽。这可确保不会截断或隐藏任何信息。

要手动调整数据的列宽,只需指定要调整的属性的名称,后跟所需的字符宽度。例如,要将“显示名称”属性的宽度调整为 10 个字符(至少!),您可以使用以下命令:


Get-Service | Select-Object Name, DisplayName, Status | 
     Format-Table -Property Name,@{Expression={$_.DisplayName};Label="Title";Width=10}, @{Expression={$_.Status};Label="Service Status";Width=10}

[玩转系统] PowerShell 格式表:综合指南

-Wrap 参数允许您创建跨多行的表。这是一个例子:

[玩转系统] PowerShell 格式表:综合指南

使用 Format-Table 将 PowerShell 输出导出到 CSV

将 PowerShell 输出导出为 CSV 可让您轻松与他人共享数据。通过将输出导出到 CSV,您可以创建可以在 Microsoft Excel 或其他电子表格程序中打开的文件。当与同事共享数据或以更精细的方式分析数据时,这非常有用。

但是,格式表主要用于格式化控制台显示的输出。当您想要将数据导出到 CSV 时,您应该使用原始对象(如 Select-Object 返回的对象)并将它们直接传递给 Export-Csv。要使用 Format-Table 将 PowerShell 输出导出到 CSV,只需将输出从 Select-Object 通过管道传送到 Export-Csv cmdlet 即可。您可以使用 -Path 参数指定 CSV 文件的名称和位置。

假设您是系统管理员,并且您想要审核组织中计算机上安装的软件。您对已安装软件的 DisplayName、Version 和 Publisher 属性特别感兴趣。您决定使用 PowerShell 获取此信息并将其导出到 CSV 文件以供进一步分析或与您的团队共享。

以下是实现这一目标的方法:


# Fetch the installed software details
$softwareInfo = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where {$_.DisplayName -Ne $Null}

#Display the Result in console with Format-Table
$softwareInfo | Format-Table DisplayName, DisplayVersion, Publisher

# Export the information to a CSV file
$softwareInfo | Select-Object DisplayName, DisplayVersion, Publisher | Export-Csv -Path 'C:\Temp\InstalledSoftware.csv' -NoTypeInformation

这里需要注意的重要一点是,导出到 CSV 文件时不要使用 Format-Table。在 Export-Csv 之前使用 Format-Table 是不合适的,并且不会产生预期的 CSV 输出。

以 PowerShell 格式表对数据进行排序

在 PowerShell Format-Table 中对数据进行排序是一项有用的功能,可让您快速识别大量数据中的趋势和模式。默认情况下,PowerShell Format-Table 将根据表的第一列对数据进行排序。但是,您还可以使用 Sort-Object cmdlet 根据其他列对数据进行排序。

要对 PowerShell Format-Table 中的数据进行排序,只需在应用 Format-Table 之前将命令输出通过管道传输到 Sort-Object 即可。例如,要按 CPU 使用率对 Get-Process cmdlet 的输出进行排序,您可以使用以下命令:


Get-Process | Select-Object Name, CPU, WorkingSet | Sort-Object -Property CPU -Descending | Format-Table

PowerShell 控制台中的输出:

[玩转系统] PowerShell 格式表:综合指南

同样,要过滤数据,您可以将Where-Object cmdlet 与Format-Table 结合使用。这允许您指定数据必须满足的条件才能包含在输出中。例如,如果您只想显示使用超过一定内存量的进程,可以使用以下命令:


Get-Process | Where-Object { $_.WorkingSet -gt 1GB } | Format-Table

这将过滤进程列表并仅显示工作集大小大于 1GB 的进程。通过将排序和过滤与 Format-Table 的格式化功能相结合,您可以轻松地以既美观又信息丰富的方式操作和显示数据。

Format-Table cmdlet 中的 GroupBy 参数

Format-Table 中的 GroupBy 参数根据属性值将输出分成表格。要使用 GroupBy,需要首先将原始命令的结果通过管道传输到 Sort-Object。这允许根据特定属性为每个组创建单独的表。


Get-Process | Sort-Object -Property basepriority | Format-Table -GroupBy basepriority -Wrap

输出 :

[玩转系统] PowerShell 格式表:综合指南

如何使用格式表表达式创建自定义列?

PowerShell Format-Table 命令可用于通过使用哈希表的计算值来创建自定义列名称。 Format-Table 的 Expression 参数允许设置自定义列名称并显示计算的列值。以下示例演示了如何使用脚本块重命名 Get-Service 命令输出中的列:


Get-Service | Select-Object Name, DisplayName, Status | 
     Format-Table -Property Name,@{Expression={$_.DisplayName};Label="Title"}, @{Expression={$_.Status};Label="Service Status"}

这是使用计算创建新列的另一个示例:


Get-Process | Where {$_.StartTime -ne $null} | 
    Format-Table ProcessName, @{Label="Running Time"; Expression={(get-date) - $_.StartTime}}

[玩转系统] PowerShell 格式表:综合指南

在此示例中,我们添加了一个计算属性“运行时间”来查找总运行时间。

包起来

在这份综合指南中,我们探讨了有关使用 PowerShell Format-Table 充分发挥其潜力所需了解的所有内容。从理解 PowerShell 输出到将输出格式化为表格、调整列宽以及将输出导出为 CSV,我们已经涵盖了所有基础知识。我们还探索了一些高级技术,例如排序、分组、显示计算值以及创建自定义列名称。理解和利用 Format-Table 命令对于 PowerShell 脚本开发至关重要,尤其是出于报告目的。通过遵循本指南中解释的示例,您可以掌握格式表并在 PowerShell 脚本中有效地使用它。

经常问的问题:

如何将 PowerShell 命令输出格式化为表格?

要将 PowerShell 命令的输出格式化为表格,可以使用 Format-Table cmdlet。此 cmdlet 允许您指定要显示的属性并自定义表的外观。例如:

Get-Process | Format-Table Name, CPU
By using the Format-Table cmdlet, you can present your data in a clear and organized manner.

How do I sort a format table in PowerShell?

To sort a format table in PowerShell, you can use the Sort-Object cmdlet. Here is an example of how to do it:

Get-Process | Sort-Object -Property CPU | Format-Table -AutoSize

您可以将 CPU 替换为您想要排序的任何其他属性。此外,您可以将 -Descending 参数与 Sort-Object 一起使用以按降序排序。

如何在 PowerShell 输出表中使用自定义标头?

要在 PowerShell 输出表中使用自定义标头,您可以使用带有 @{Label='HeaderName';Expression={Expression}} 语法的 Select-Object cmdlet,然后将输出通过管道传输到 Format-Table cmdlet。这允许您指定要显示的属性并为其分配自定义标题。例如,您可以使用以下命令:
Get-Process | Select-Object -Property @{Label="进程名称";表达式={$_.Name}},@{Label="CPU 使用率";表达式={$_.CPU}} | Format-Table
需要注意的是,Select-Object cmdlet 应在 Format-Table 之前使用,因为在选择之前进行格式化可能不会产生所需的结果。

如何使用PowerShell格式列表?

要使用 PowerShell format-list 命令,您可以首先选择要格式化的一个或多个对象。然后,您可以将输出通过管道传输到 format-list 命令,后跟任何所需的参数或属性。这将以列表格式显示所选信息,使其更易于阅读和分析。例如:

Get-ChildItem -Path C:\Temp | Format-List -Property Root, FullName, Attributes, BaseName, PsDrive, PSIsContainer, PSProvider, Parent, Exists, LastAccessTime,Name,LastWriteTime,CreationTime

PowerShell 中的格式范围是什么?

Format-Wide(简称fw)是一个PowerShell cmdlet,它将管道中每个对象的单个属性显示为宽列表,而不是Format-Table的类似表格的格式。当您只想显示每个对象的一个属性时,应使用 Format-Wide。如果要显示多个属性,则应使用 Format-Table。
Get-ChildItem -Path C:\Temp | Format-Wide -Property FullName

这将使用控制台窗口的全宽向您显示所有文件和文件夹路径的列表。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯