`

PowerShell基础教程(7)——使用格式命令更改输出视图

阅读更多

PowerShell基础教程(7)——使用格式命令更改输出视图            <o:p></o:p>

Windows PowerShell 提供了一组 cmdlet使用这些 cmdlet 您可以控制要为特定对象显示的属性。这些 cmdlet 的名称均以动词 Format 开头。它们允许您选择一个或多个要显示的属性。

Format cmdlet 包括 Format-WideFormat-ListFormat-Table Format-Custom。本文中将仅介绍 Format-WideFormat-List Format-Table cmdlet

每个格式 cmdlet 都具有默认属性;如果未指定要显示的特定属性,则会使用这些默认属性。此外,每个 cmdlet 都使用同一参数名称 Property 来指定要显示的属性。由于 Format-Wide 仅显示单个属性,因此其 Property 参数只获取单个值,但 Format-List Format-Table 的属性参数将接受一组属性名称。

如果对 2 个正在运行的 Windows PowerShell 实例使用命令 Get-Process -Name powershell,所得到的输出将与以下所示类似:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName<o:p></o:p>

-------  ------    -----      ----- -----   ------     -- -----------<o:p></o:p>

995       9    30308      27996   152     2.73   2760 powershell<o:p></o:p>

331       9    23284      29084   143     1.06   3448 powershell<o:p></o:p>

<o:p> </o:p>
本节的其余部分将探讨如何使用 Format cmdlet 来更改此命令的输出显示方式。

使用 Format-Wide 输出单个项目<o:p></o:p>

默认情况下,Format-Wide cmdlet 仅显示对象的默认属性。与每个对象相关联的信息将显示在单独一列中:

PS> Get-Process -Name powershell | Format-Wide<o:p></o:p>

<o:p> </o:p>

powershell                              powershell<o:p></o:p>

<o:p> </o:p>也可以指定非默认属性:

PS> Get-Process -Name powershell | Format-Wide -Property Id<o:p></o:p>

<o:p> </o:p>

2760                                    3448<o:p></o:p>

<o:p> </o:p>使用 Column 控制 Format-Wide 显示<o:p></o:p>

使用 Format-Wide cmdlet每次只能显示一个属性。这样对于显示每行仅显示一个元素的简单列表十分有用。若要获取简单列表,请键入下面命令来将 Column 参数的值设置为 1

Get-Command Format-Wide -Property Name -Column 1<o:p></o:p>

<o:p> </o:p>使用 Format-List 显示列表视图<o:p></o:p>

Format-List cmdlet 以列表的形式显示对象并在单独行上标记和显示每个属性

PS> Get-Process -Name powershell | Format-List<o:p></o:p>

<o:p> </o:p>

Id      : 2760<o:p></o:p>

Handles : 1242<o:p></o:p>

CPU     : 3.03125<o:p></o:p>

Name     powershell<o:p></o:p>

<o:p> </o:p>

Id      : 3448<o:p></o:p>

Handles : 328<o:p></o:p>

CPU     : 1.0625<o:p></o:p>

Name     powershell<o:p></o:p>

<o:p> </o:p>
可以根据需要指定任意数量的属性:

PS> Get-Process -Name powershell | Format-List -Property ProcessName,FileVersion<o:p></o:p>

,StartTime,Id<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

ProcessName       :powershell<o:p></o:p>

FileVersion       : 1.0.9567.1<o:p></o:p>

StartTime   : 2006-05-24 <st1:timeminute42hour w:st="on">13:42:00</st1:timeminute42hour><o:p></o:p>

Id          : 2760<o:p></o:p>

<o:p> </o:p>

ProcessName       :powershell<o:p></o:p>

FileVersion       : 1.0.9567.1<o:p></o:p>

StartTime   : 2006-05-24 <st1:timeminute54hour w:st="on">13:54:28</st1:timeminute54hour><o:p></o:p>

Id          : 3448<o:p></o:p>

<o:p> </o:p>使用 Format-List 和通配符来获取详细信息<o:p></o:p>

Format-List cmdlet 允许您将通配符用作其 Property 参数的值。这样可以显示详细信息。通常,对象所包含的信息多于您需要的信息,因此,默认情况下 Windows PowerShell 将不会显示所有属性值。若要显示对象的所有属性,请使用 Format-List -Property * 命令。以下命令将为单个进程生成超过 60 行输出:

Get-Process -Name powershell | Format-List -Property *<o:p></o:p>

<o:p> </o:p>
尽管 Format-List 命令对于显示详细信息十分有用但如果希望获得包含多个项目的输出概览则较简单的表格格式视图通常会更有用。

使用 Format-Table 显示表格格式输出<o:p></o:p>

如果使用 Format-Table cmdlet(未指定任何属性名)来设置 Get-Process 命令的输出格式,所获得的输出效果将与不执行任何格式设置的情况完全相同。这是因为与大多数 Windows PowerShell 对象一样,进程通常是以表格格式显示的。

PS> Get-Process -Name powershell | Format-Table<o:p></o:p>

<o:p> </o:p>

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName<o:p></o:p>

-------  ------    -----      ----- -----   ------     -- -----------<o:p></o:p>

1488       9    31568      29460   152     3.53   2760 powershell<o:p></o:p>

332       9    23140        632   141     1.06   3448 powershell<o:p></o:p>

<o:p> </o:p>改进 Format-Table 输出 (AutoSize)<o:p></o:p>

尽管表格格式的视图适用于显示大量可比较信息但其可能难以判断显示区域是否过窄而无法容纳数据。例如,如果试图显示进程路径、ID、名称和公司,则会导致进程路径和公司列的输出被截断:

PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company<o:p></o:p>

<o:p> </o:p>

Path                Name                                 Id Company<o:p></o:p>

----                ----                                 -- -------<o:p></o:p>

C:\Program Files... powershell                         2836 Microsoft Corpor...<o:p></o:p>

<o:p> </o:p>如果在运行 Format-Table 命令时指定了 AutoSize 参数 Windows PowerShell 将基于要显示的实际数据来计算列宽。这样会使 Path 列可读,但公司列仍处于截断状态:

PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company -<o:p></o:p>

AutoSize<o:p></o:p>

<o:p> </o:p>

Path                                                    Name         Id Company<o:p></o:p>

----                                                    ----         -- -------<o:p></o:p>

C:\Program Files\Windows PowerShell\v1.0\powershell.exe powershell 2836 Micr...<o:p></o:p>

<o:p> </o:p>Format-Table cmdlet 仍然可能会截断数据但截断只会发生在屏幕的末尾部分。除最后一个显示的属性外,会将其他属性指定为其最长数据元素所需的宽度以进行正常显示。如果在 Property 值列表中将 Path Company 交换位置,您将会看到公司名称为可见的,但路径被截断:

PS> Get-Process -Name powershell | Format-Table -Property Company,Name,Id,Path -<o:p></o:p>

AutoSize<o:p></o:p>

<o:p> </o:p>

Company               Name         Id Path<o:p></o:p>

-------               ----         -- ----<o:p></o:p>

Microsoft Corporation powershell 2836 C:\Program Files\Windows PowerShell\v1...<o:p></o:p>

<o:p> </o:p>Format-Table 命令假定离属性列表开头越近的属性的重要性越高。因此,它会试图完全显示最靠近开头的属性。如果 Format-Table 命令无法显示所有属性,则会从显示中删除部分列并发出相应警告。如果将 Name 作为列表中的最后一个属性,则会看到此类行为:

PS> Get-Process -Name powershell | Format-Table -Property Company,Path,Id,Name -<o:p></o:p>

AutoSize<o:p></o:p>

<o:p> </o:p>

警告: Name无法显示已被删除。<o:p></o:p>

<o:p> </o:p>

Company               Path                                                    I<o:p></o:p>

d<o:p></o:p>

-------               ----                                                    -<o:p></o:p>

Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\powershell.exe 6<o:p></o:p>

<o:p> </o:p>在以上输出中ID 列被截断以便能容纳在列表中并且堆叠了列标题。自动调整各列大小,并不一定总会实现您需要的效果。

Format-Table 输出在列中换行 (Wrap)<o:p></o:p>

通过使用 Wrap 参数,可以将冗长的 Format-Table 数据强行在其显示列中换行。单独使用 Wrap 参数不一定能实现您的预期效果,这是因为如果不同时指定 AutoSize,则会使用默认设置:

PS> Get-Process -Name powershell | Format-Table -Wrap -Property Name,Id,Company,<o:p></o:p>

Path<o:p></o:p>

<o:p> </o:p>

Name                                 Id Company             Path<o:p></o:p>

----                                 -- -------             ----<o:p></o:p>

powershell                         2836 Microsoft Corporati C:\Program Files\Wi<o:p></o:p>

on                  ndows PowerShell\v1<o:p></o:p>

.0\powershell.exe <o:p></o:p>

<o:p> </o:p>单独使用 Wrap 参数的一个优点在于它不会极大降低处理速度。如果在执行大型目录系统的递归文件列表时使用 AutoSize,则在显示第一个输出项之前可能需要花费很长时间并占用大量内存。

如果不考虑系统负载,则将 AutoSize Wrap 参数一起使用会取得不错的效果。与指定 AutoSize 而不指定 Wrap 参数时的情况一样,始终会为初始列分配所需的宽度以便在一行内显示项目。唯一的不同之处在于:如有必要,最后一列将进行换行:

PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I<o:p></o:p>

d,Company,Path<o:p></o:p>

<o:p> </o:p>

Name         Id Company               Path<o:p></o:p>

----         -- -------               ----<o:p></o:p>

powershell 2836 Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\<o:p></o:p>

powershell.exe<o:p></o:p>

<o:p> </o:p>如果先指定最宽的列则可能无法显示某些列因此最安全的做法是先指定最小的数据元素。在以下示例中,我们先指定最宽的路径元素,在这种情况下,即使通过换行也仍然无法显示最后的 Name 列:

PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Path,I<o:p></o:p>

d,Company,Name<o:p></o:p>

<o:p> </o:p>

警告: Name无法显示已被删除。<o:p></o:p>

<o:p> </o:p>

Path                                                      Id Company<o:p></o:p>

----                                                      -- -------<o:p></o:p>

C:\Program Files\Windows PowerShell\v1.0\powershell.exe 2836 Microsoft Corporat<o:p></o:p>

ion<o:p></o:p>

<o:p> </o:p>组织表输出 (-GroupBy)<o:p></o:p>

用于表格格式输出控制的另一个有用参数是 GroupBy。越长的表格格式列表可能越难以进行比较。使用 GroupBy 参数可以基于属性值对输出进行分组。例如,我们可以按公司对进程进行分组,从而忽略属性列表中的公司值来更轻松地进行检查:

PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I<o:p></o:p>

d,Path -GroupBy Company<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

Company           :Microsoft Corporation<o:p></o:p>

<o:p> </o:p>

Name         Id Path<o:p></o:p>

----         -- ----<o:p></o:p>

powershell 1956 C:\Program Files\Windows PowerShell\v1.0\powershell.exe<o:p></o:p>

powershell 2656 C:\Program Files\Windows PowerShell\v1.0\powershell.exe<o:p></o:p>

 
分享到:
评论

相关推荐

    PowerShell基础教程.doc

    PowerShell的基础教程主要涵盖了它与传统外壳程序的区别、Cmdlet的使用、全新的脚本语言特性和与Windows命令及实用工具的集成。 1. **处理方式的不同**: PowerShell 不像传统的Cmd.exe或其他Unix外壳程序那样处理...

    001.PDF.渗透技巧——获得Powershell命令的历史记录–3gstudent1

    要导出PowerShell历史记录到CSV文件,可以使用命令`Get-History | Export-Csv $env:temp"\history.csv"`。需要注意的是,由于命令本身包含特殊字符,如管道符 "|"、美元符号 "$" 和双引号 """,在模拟键盘输入时需要...

    Win7PowerShell使用教程

    Win7PowerShell使用教程,学习这个脚本还是有好处的,看看吧

    PowerShell基本语法及常用命令(中文)

    3. **Pipeline**:PowerShell采用管道机制,允许将一个命令的输出作为另一个命令的输入,类似于Unix/Linux中的管道操作。 4. **Providers**:提供者是PowerShell扩展其功能的方式,如文件系统提供者、注册表提供者...

    经典PowerShell入门教程.docx

    传统外壳程序如Cmd.exe、SH、KSH、CSH和BASH通常以文本格式处理命令输出,而PowerShell则处理基于.NET平台的对象,这使得数据处理更为灵活和强大。 PowerShell的核心概念之一是Cmdlet(发音为“command-let”),...

    PowerShell教程

    2. **对象管道**: PowerShell的核心是对象管道,它允许用户将命令的输出作为输入传递给下一个命令,类似于Unix的管道,但处理的是对象而非文本。 3. **PowerShell工作区**: 工作区包含了变量、别名、函数等,它们在...

    PowerShell基础教程

    【PowerShell基础教程】 PowerShell是一种专为管理和自动化Windows操作系统设计的强大脚本语言,自Windows XP/Server 2003起,它逐渐成为Vista、Server 2008及后续版本的标准组件。PowerShell旨在提升系统管理员的...

    PowerShell 基础教程

    【PowerShell基础教程】 PowerShell是一种强大的脚本语言和命令行shell,主要应用于Windows操作系统,如XP、Server 2003、Vista和Server 2008。不同于传统的外壳程序(如Cmd.exe、SH、KSH、CSH和BASH),PowerShell...

    Windows PowerShell系列课程(1):PowerShell概览及使用技巧

    3. **脚本语言**:PowerShell使用.NET Framework为基础的脚本语言,支持高级编程结构,如函数、变量、条件语句和循环。 **PowerShell的优势** 包括: 1. **面向对象的输出**:每个命令的结果通常是一个对象,可以...

    powershell教程

    ### PowerShell 教程详解 #### 一、PowerShell 概述与重要性 PowerShell 是一个强大的命令行脚本环境,由微软开发并提供支持,主要用于 Windows 系统的管理和自动化任务处理。自 Exchange Server 2007 和 System ...

    Powershell 实例教程

    PowerShell中的管道符号(|)是另一个关键特性,它允许将一个命令的输出作为另一个命令的输入,实现命令间的串联。例如,`ls | sort -Descending Name | Format-Table Name,Mode` 将列出当前目录的文件,按名称降序...

    Windows PowerShell教程合集

    --|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南.pdf --|Windows PowerShell 入门.pdf --|Windows PowerShell 语言快速参考.rtf |Manning.Windows....

    精通windows server 2008 命令行与powershell电子书PDF版(第一卷)

    《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...

    精通windows server 2008 命令行与powershell 电子书PDF单文件完整版

    精通windows server 2008 命令行与powershell 电子书PDF...10.4.3 &——同一行中使用多个不同命令 472 10.4.4 &&——如果多个命令中的一个失败即中止后续命令 473 10.4.5 ]sysy[ ]sysy[——允许在字符串中包含空格 473...

    精通windows server 2008 命令行与powershell电子书PDF版(第二卷)

    《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...

    精通windows server 2008 命令行与powershell 电子书PDF版(第四卷)

    《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...

    powershell 教程

    PowerShell 3.0进阶教程中提到的服务器管理主要围绕以下几个方面: 1. 启用多服务器管理:在Windows Server 2012中,管理员可以启用远程管理功能,从而可以在本地或远程管理服务器。启用远程管理的基本步骤包括打开...

    Powershell常用命令

    3. 更新帮助文档:使用help-update命令来更新Powershell的帮助系统,确保你能够访问到最新的命令文档和示例。 4. Get-NetIPConfiguration:替代了传统ipconfig/all命令,用于查询本机的IP地址信息。 5. 查看网卡...

Global site tag (gtag.js) - Google Analytics