今天, 我将为您介绍如何使用格式化和输出命令. 在PowerShell中,负责进行格式化和输出的是三类cmdlet。他们分别是:Format-*、Out-*和 Write-* 。顾名思义,Format-* 主要是用来对信息进行格式化操做,Out-*用于指定输出设备,而 Write-* 为 PowerShell 宿主(Host)输出的更多有用信息提供了快捷访问接口。app
咱们要将对象输出到控制台或打印机等位置前,咱们首先必须将对象格式化成为字符串的形式。一个对象可能包含几十种属性信息,PowerShell的开发者已经考虑到咱们在平常使用时,不会使用一个对象的全部信息,所以默认状况下只保留该对象上最主要的几种属性。让咱们来看看进程对象默认会显示哪些属性。首先看看进程对象究竟有多少个属性:
PS C:/> (Get-Process Idle | Get-Member -MemberType Property).Count
51ide
在上面例子,首先使用Get-Process命令返回表示Idle进程的对象,并经过Get-Member命令返回该对象上全部属性,最后咱们给出该对象的属性个数(打印这些属性太占地方了,你能够把Count去掉,检查返回的结果)。让咱们看看PowerShell默认状况下会输出哪些属性吧:
PS C:/> Get-Process Idle学习
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 16 0 0 Idle编码
正如前面所介绍的,PowerShell默认只会返回对象上一部分属性信息,究竟显示哪些属性是经过定义在ETS系统中的信息决定的。spa
Format族包含了:Format-Custom、Format-List、Format-Table和Format-Wide四个命令。在大多数状况下,Format-Table是PowerShell默认使用的格式器。Format-List的输出相似上面输出进程属性的格式,每一个对象将会占一行。一行内包括该对象的多个主要属性,若是该属性信息太长,PowerShell就会将该信息截断。让咱们看几个管理PowerShell最经常使用的例子:
PS C:/> Get-EventLog -LogName 'Windows PowerShell' -Newest 10 | Format-Table翻译
Index Time Type Source InstanceID Message
----- ---- ---- ------ ---------- -------
1029 五月 31 21:38 Information PowerShell 400 Engine state is changed from None to Available....
1028 五月 31 21:38 Information PowerShell 400 Engine state is changed from None to Available....
1027 五月 31 21:38 Information PowerShell 600 Provider "Certificate" is Started. ...
1026 五月 31 21:38 Information PowerShell 600 Provider "Variable" is Started. ...
1025 五月 31 21:38 Information PowerShell 600 Provider "Registry" is Started. ...
1024 五月 31 21:38 Information PowerShell 600 Provider "Function" is Started. ...
1023 五月 31 21:38 Information PowerShell 600 Provider "FileSystem" is Started. ...
1022 五月 31 21:38 Information PowerShell 600 Provider "Environment" is Started. ...
1021 五月 31 21:38 Information PowerShell 600 Provider "Alias" is Started. ...
1020 五月 31 15:43 Information PowerShell 403 Engine state is changed from Available to Stopp...日志
这个例子显示PowerShell最近10个日志的日志信息. Format-Table为了保证每一个对象只输出一行,只会输出那些较重要的信息,通常对对象的检索,使用Format-Table就是最好的办法。code
其余几个命令, 您能够参照PowerShell的帮助, 或我翻译的帮助信息详细学习.orm
看完了负责格式化对象输出信息的cmdlet,咱们须要考虑该把这些信息输出到什么位置了。Out族包括了:Out-Default、Out-File、Out-Host、Out-Null、Out-Printer、Out-GridView和Out-String。
对象
Out-Host命令,就是将显示结果返回给宿主程序,由宿主程序展示给使用者。Out-Default默认就是使用Out-Host进行输出,可是根据PowerShell文档的描述,Out-Default用来提供一种占位符的特性,你能够在脚本完成后,从新修改Out-Default来控制整个程序的输出。
Out-Null的做用就是将输出丢弃,在不少时候,若是咱们不关心命令的返回结果,而只关一条命令产生的某些影响时,咱们能够将该命令的输出经过管道发送给Out-Null。例如:
PS C:/> New-Item TestIt -Type dir
Directory: Microsoft.PowerShell.Core/FileSystem::C:/
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2007-9-16 21:10 TestIt
PS C:/> New-Item TestIt -Type dir | Out-Null
New-Item : Item with specified name C:/TestIt already exists.
At line:1 char:9
+ New-Item <<<< TestIt -Type dir | Out-Null
PS C:/> Remove-Item TestIt
PS C:/> New-Item TestIt -Type dir | Out-Null
PS C:/>
咱们首先建立了TestIt的目录,默认状况下,New-Item返回新建立的目录,该对象被输出到控制台上。咱们接下来试图再建立一次该目录,并将输出信息丢弃。然而,因为该目录已经存在,所以建立失败,命令给出了错误提示。这里咱们须要注意错误信息并无被丢弃!接下来咱们删除目录TestIt,再次执行建立命令,此次,屏幕上没有显示建立的目录信息。
最后,咱们来看看Out-File。不少时候,咱们须要将某种编码的字符串存储为其余编码形式。咱们能够简单的使用Out-File的参数Encoding来设置输出信息的编码格式。这些编码包括了:“Unicode”、“UTF7”、“UTF8”、“UTF32”、“ASCII”等等。有时候,咱们还会遇到若是将信息写入文件中。若是该文件已经存在,咱们可能但愿信息继续追加到文件的末尾,或者当文件已经存在时,咱们但愿覆盖这个文件。经过参数Append,咱们能够告诉Out-File到底是覆盖文件,仍是在文件的末尾进行追加。让咱们看看简单的例子: PS C:/> "我是第一行!" | Out-File append.txt PS C:/> Get-Content C:/append.txt 我是第一行! PS C:/> "我是第二行,可是我要试试覆盖第一个行!!" | Out-File append.txt PS C:/> Get-Content C:/append.txt 我是第二行,可是我要试试覆盖第一个行!! PS C:/> "我是第三行,让我跟在第二行后面吧!!!" | Out-File -Append append.txt PS C:/> Get-Content C:/append.txt 我是第二行,可是我要试试覆盖第一个行!! 我是第三行,让我跟在第二行后面吧!!!