管道并不是什么新事物,以前的Cmd控制臺(tái)也有重定向的命令,例如Dir | More可以將結(jié)果分屏顯示。
傳統(tǒng)的Cmd管道是基于文本的,但是Powershell是基于對(duì)象。
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
首先列出當(dāng)前目錄下的目錄和文件,然后根據(jù)文件名降序排列,再投影文件名,文件大小,文件的修改時(shí)間,轉(zhuǎn)換成Html格式,輸出到當(dāng)前目錄的ls.html
面向?qū)ο蟮墓艿?/p>
上面的例子屬于面向?qū)ο蟮墓艿?,每個(gè)命令的末尾可以使用新的命令對(duì)上個(gè)命令的結(jié)果做進(jìn)一步處理,除非管道是以輸出命令結(jié)束的。就像Sort-Object一樣,對(duì)文件的列表進(jìn)行排序,需要告訴它排序的關(guān)鍵字,按照升序還是降序。ls的返回值為一個(gè)數(shù)組,數(shù)組中的每一個(gè)元素都是一個(gè)對(duì)象,對(duì)象的每一個(gè)屬性都可以作為Sort-Object的排序關(guān)鍵字。但是排序時(shí)必須指定一個(gè)具體的關(guān)鍵字,因?yàn)镻owershell所傳遞的對(duì)象可能有很多屬性。不像普通的文本,對(duì)象的信息都是結(jié)構(gòu)化的,因此也使得Powershell的管道變得更加強(qiáng)大和方便。
轉(zhuǎn)換命令執(zhí)行的結(jié)果為文本
在執(zhí)行Powershell命令時(shí),解釋器會(huì)默認(rèn)在命令的結(jié)尾追加一個(gè)管道命令,Out-Default,這樣可以將原來(lái)的對(duì)象結(jié)果以文本的形式顯示在控制臺(tái)上,但是并沒(méi)有將結(jié)果進(jìn)行轉(zhuǎn)換,所以可以繼續(xù)使用其它管道對(duì)對(duì)象的結(jié)果進(jìn)行操作,但是一旦使用了諸如ConvertTo-Html這樣的命令后,就會(huì)將結(jié)果轉(zhuǎn)換成固定格式的純文本。
常用的對(duì)管道結(jié)果進(jìn)一步處理的命令有:
Compare-Object: 比較兩組對(duì)象。
ConvertTo-Html: 將 Microsoft .NET Framework 對(duì)象轉(zhuǎn)換為可在 Web 瀏覽器中顯示的 HTML。
Export-Clixml: 創(chuàng)建對(duì)象的基于 XML 的表示形式并將其存儲(chǔ)在文件中。
Export-Csv: 將 Microsoft .NET Framework 對(duì)象轉(zhuǎn)換為一系列以逗號(hào)分隔的、長(zhǎng)度可變的 (CSV) 字符串,并將這些字符串保存到
一個(gè) CSV 文件中。
ForEach-Object: 針對(duì)每一組輸入對(duì)象執(zhí)行操作。
新聞熱點(diǎn)
疑難解答
圖片精選