首页 > 开发 > PowerShell > 正文

Windows Powershell使用管道

2020-05-30 20:16:38
字体:
来源:转载
供稿:网友

管道并不是什么新事物,以前的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: 针对每一组输入对象执行操作。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表