Powershell对象转换成文本 2


怎样将Powershell的对象结果转换成文本并显示在控制台上。Powershell已经内置Out-Default命令追加在管道的命令串的末尾。因此你使用dir 和dir | out-default的结果是相同的。
Out-Default可以将对象转换成可视的文本。事实上Out-Default会首先调用Format-Table,将更多的属性默认隐藏。再调用Out-Host将结果输出在控制台上。因此下面的三组命令执行结果是相同的。

ls
ls | Format-Table | Out-Host
ls | Out-Default

显示隐藏的对象属性

要查看对象结果的所有属性,可是使用
ls | Format-Table *
这样因为属性和属性的内容太多可能不会显示完全,可以使用文本换行参数
ls | Format-Table * -Wrap

格式化管道结果

首先可是使用下面的命令查看所有以Format打头的命令

PS C:Powershell> Get-Command -Verb format

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Format-Custom                   Format-Custom [[-Property]
Cmdlet          Format-List                     Format-List [[-Property]
Cmdlet          Format-Table                    Format-Table [[-Property]
Cmdlet          Format-Wide                     Format-Wide [[-Property]

Format-Custom: 使用自定义视图来设置输出的格式。
Format-List: 将输出的格式设置为属性列表,其中每个属性均各占一行显示。
Format-Table: 将输出的格式设置为表。
Format-Wide: 将对象的格式设置为只能显示每个对象的一个属性的宽表。

显示指定的属性

要显示指定的属性,你首先得知道结果对象中的属性名,例如:

PS C:Powershell> ls | Format-Table Name,Length,LastWriteTime

Name                       Length                     LastWriteTime
----                       ------                     -------------
ABC                                                   2011/11/23 17:25:53
myscript                                              2011/11/29 18:21:28
a.html                     67580                      2011/11/24 18:30:13
a.txt                      26384                      2011/11/24 20:04:31
alias                      12060                      2011/11/24 20:26:36

使用通配符

例如要查看当前以i打头的进程,并显示进程的名字和其它以”pe”打头,以”64″结尾的进程。

PS C:Powershell> Get-Process i* | Format-Table Name,pe*64

Name                PeakPagedMemorySize    PeakWorkingSet64 PeakVirtualMemorySi
                                     64                                    ze64
----                	-------------------    	----------------	 -------------------
Idle                                  0                   0                   0
IMECFMUI                      946176                4292608             48054272
IMECMNT                       1564672              5320704             65482752
IMEDICTUPDATE             1224704              4579328             31965184

脚本块作为属性

在Powershell中文件的Length默认以byte作为单位如果你象让它输出时以KB显示,可是考虑羡下面的方法。

PS C:Powershell> ls | Format-Table Name,{ [int]($_.Length/1kb) }

Name                        [int]($_.Length/1kb)
----                       ----------------------
function.ps1                                21
LogoTestConfig.xml                     0
ls.html                                         3
name.html                                   7

修改列标题

使用合成的属性,如果使用脚本块作为标题,看着很不爽。可以使用Lable设置。同样是上面的例子,稍作修改。

PS C:Powershell> $column = @{Expression={ [int]($_.Length/1KB) }; Label="KB" }
PS C:Powershell> Dir | Format-Table Name, $column

Name                                       KB
----                       ----------------------
function.ps1                                21
LogoTestConfig.xml                     0
ls.html                                         3
name.html

优化列宽度

因为Powershell的绝大多数输出都是实时的流模式,所以下一条结果的宽度未知,Powershell的结果会默认采用分散对齐,这样可以最大限度利用控制台的宽度,但是可以通过-auto参数对列的宽带进行优化,会将属性值的最大宽带作为每一列的宽度,对比一下吧:

PS C:Powershell> ls

    目录: C:Powershell

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2011/11/23     17:25            ABC
d----        2011/11/29     18:21            myscript
-a---        2011/11/24     18:30      67580 a.html
-a---        2011/11/24     20:04      26384 a.txt
PS C:Powershell> ls | Format-Table -AutoSize

    目录: C:Powershell

Mode         LastWriteTime Length Name
----         ------------- ------ ----
d---- 2011/11/23     17:25        ABC
d---- 2011/11/29     18:21        myscript
-a--- 2011/11/24     18:30  67580 a.html
本文链接: https://www.pstips.net/powershell-converting-objects-into-text.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

回复 lauranda 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

2 条评论 “Powershell对象转换成文本

  • Hector

    这个的例子的命令是不是有错误“例如要查看当前以i打头的进程,并显示进程的名字和其它以”pe”打头,以”64″结尾的进程。”

    为什么我觉得应该是 get-process i*, pe*64 | format-table name

    • lauranda

      他的描述不是很精准,应该是显示以“i”开头的进程的名字,并显示其下name和以“pe”开头以“64”结尾的属性。
      你的写法呢是显示以“i”开头,以及“以pe开头以64结尾”这两种类型的进程,并显示他们的“name”属性。
      都是正确的命令