管道并不是什么新事物,以前的Cmd控制臺也有重定向的命令,例如Dir | More可以將結果分屏顯示。
傳統的Cmd管道是基于文本的,但是Powershell是基于對象。
PS> ls | Sort-Object -Descending Name | Select-Object Name,Length,LastWriteTime | ConvertTo-Html | Out-File ls.htmlPS> Get-Content .ls.html
Name Length LastWriteTimetest.vbs 170 2011/11/28 16:42:03test.txt 242 2011/11/23 17:37:37test.ps1 140 2011/12/2 18:47:35psdrive.html 2556 2011/11/30 16:04:00Powershell_Cmdlets.html 735892 2011/11/24 17:44:37ping.bat 63 2011/11/28 15:30:04name.html 7420 2011/11/24 17:37:28myscript 2011/11/29 18:21:28ls.html 434 2011/12/14 11:22:30LogoTestConfig.xml 186 2011/11/28 11:12:08function.ps1 21466 2011/11/29 19:23:58employee.xml 556 2011/11/25 11:20:33d.txt 0 2011/11/23 17:25:23c.txt 0 2011/11/23 17:25:23b.txt 0 2011/11/23 17:25:23alias.ps1 12060 2011/11/24 20:27:24alias 12060 2011/11/24 20:26:36ABC 2011/11/23 17:25:53a.txt 26384 2011/11/24 20:04:31a.html 67580 2011/11/24 18:30:13
首先列出當前目錄下的目錄和文件,然后根據文件名降序排列,再投影文件名,文件大小,文件的修改時間,轉換成Html格式,輸出到當前目錄的ls.html
面向對象的管道
上面的例子屬于面向對象的管道,每個命令的末尾可以使用新的命令對上個命令的結果做進一步處理,除非管道是以輸出命令結束的。就像Sort-Object一樣,對文件的列表進行排序,需要告訴它排序的關鍵字,按照升序還是降序。ls的返回值為一個數組,數組中的每一個元素都是一個對象,對象的每一個屬性都可以作為Sort-Object的排序關鍵字。但是排序時必須指定一個具體的關鍵字,因為Powershell所傳遞的對象可能有很多屬性。不像普通的文本,對象的信息都是結構化的,因此也使得Powershell的管道變得更加強大和方便。
轉換命令執行的結果為文本
在執行Powershell命令時,解釋器會默認在命令的結尾追加一個管道命令,Out-Default,這樣可以將原來的對象結果以文本的形式顯示在控制臺上,但是并沒有將結果進行轉換,所以可以繼續使用其它管道對對象的結果進行操作,但是一旦使用了諸如ConvertTo-Html這樣的命令后,就會將結果轉換成固定格式的純文本。
常用的對管道結果進一步處理的命令有:
Compare-Object: 比較兩組對象。
ConvertTo-Html: 將 Microsoft .NET Framework 對象轉換為可在 Web 瀏覽器中顯示的 HTML。
Export-Clixml: 創建對象的基于 XML 的表示形式并將其存儲在文件中。
Export-Csv: 將 Microsoft .NET Framework 對象轉換為一系列以逗號分隔的、長度可變的 (CSV) 字符串,并將這些字符串保存到
一個 CSV 文件中。
ForEach-Object: 針對每一組輸入對象執行操作。
新聞熱點
疑難解答