PowerShell的一个重中之重的功能就是管道(pipeline),本文从浅入深,一步一步详解管道的使用方法和例子,来看看有没有你所不知道的吧,若是全知道,恭喜你已经很厉害啦——适用于全部PowerShell应用小白与技术老鸟。另外欢迎各位技术大牛来补充讨论学习~html
在Shell中一个重要的基本概念就是管道(pipeline),即在一组命令中,输出的命令结果成为下一个命令的输入参数。管道的概念与真实生活中的生产线比较类似:在不一样的生产环节进行连续的再加工,以下图例子:shell
“Get-ChildItem”意思是获取当前路径的全部项目,“|Where-Object {$_.Length -gt 200}”意思是查看上一步结果,取全部长度大于200的项目,“|Sort-Object -Descending Name”意思是查看上一步结果,按照Name进行倒叙排列。数组
在PowerShell中,使用管道符号(|)来划分管道中的每一个命令,上述例子说明了管道的强大功能,同时PowerShell在管道中传递的是高保真对象,不只仅是文本描述。浏览器
下面主要给你们介绍一下经常使用的管道处理命令。ide
可使用Where-Object(别名是where和?)从列表或者命令输出结果中过滤选择你须要的项目。学习
对于输入的每一项,Where-Object都会根据{}中定义的脚本块对输入进行计算,若是返回True,则输出,不然不输出。以下例子:spa
{}表示一个脚本块,能够输入一系列PowerShell命令,其中$_表明当前输入对象,在这个例子中,$_就表明一个文件项目。-gt是比较操做符,意思是大于,关于比较操做符的介绍以下:3d
PowerShell中比较操做符是用于对表达式进行比较的。默认状况比较操做符不区分大小写,若是想要区分,须要使用-C前缀,不须要区分的,使用-I前缀。orm
全部可用的比较操做符以下表格:htm
操做符 |
意义 |
返回True的例子 |
-eq |
相等符 |
10 -eq 10 |
-ne |
不相等符 |
10 -ne 9 |
-ge |
大于等于操做符 |
10 -ge 9 |
-gt |
大于操做符 |
10 -gt 9 |
-lt |
小于操做符 |
10 -lt 11 |
-le |
小于等于操做符 |
10 -le 11 |
-like |
类似操做符 |
"Bob" -like "*ob" |
-notlike |
非类似操做符 |
"Bob" -notlike "1*ob" |
-match |
匹配操做符 |
"Bob" -match "B*ob" |
-notmatch |
非匹配操做符 |
"Bob" -notmatch "123*" |
-contains |
包含操做符 |
"Bob","Bob1" -contains "Bob" |
-notcontains |
非包含操做符 |
"Bob","Bob1" -notcontains "ob" |
-is |
类型操做符 |
"Bob" -is "System.String" |
-isnot |
非类型操做符 |
"Bob" -isnot "System.Int32" |
使用ForEach-Object命令(别名是foreach和%)来处理列表中的每一项。
使用例子以下:
例子中1..10的意思是简单声明了一个1~10的一组数字。其中处理列表中每一项还能够用for、foreach、do和while等,之后会更详细的介绍。
使用Select-Object(别名是select)对象能够选择一个对象或者一组对象的指定属性。还能够从对象的数组中选择惟一的对象,也能够从对象数组的开头或末尾选择指定个数的对象。
若是使用 Select-Object 来选择指定属性,则它会从输入对象中复制这些属性的值,并建立具备指定的属性和复制的值的新对象。使用 Property 参数指定您要选择的属性。或者,使用 First、Last、Unique、Skip 和 Index 参数从输入对象数组中选择特定对象。
使用例子以下:
a) 选择当前路径下全部项目的Name和Length属性:
b) 选择当前路径下前三个项目:
c) 选择当前路径下全部项目的Name和自定义属性,名字叫作Last Modified Day,结果是经过LastWriteTime属性算出来的:
d) 选择当前路径下第一个和第六个项目:
e) 选择当前路径下除第五个项目外的全部项目:
f) 显示数组中的惟一数字:
使用Sort-Object(别名是sort)能够按照特定属性值对对象进行排序。您能够指定一个属性或多个属性(用于多键排序),也能够选择区分大小写或不区分大小写的排序。您还能够指示 Sort-Object 只显示对于特定属性具备惟一值的对象。
若是某个对象不具备所指定的属性之一,则 cmdlet 会将该对象的属性值解释为 NULL,并将其放置在排序顺序的末尾。
使用例子以下:
a) 对当前路径下全部的项目按照长度从小到大排序:
b) 对整个数组的惟一性数字按照降序排列:
使用Tee-Object(别名是tee)命令能够将命令输出结果保存在文件或者变量中,同时将其显示在控制台中。
a) 将当前路径下全部大小大于900的项目都保存到文件中并显示在控制台中:
b) 将当前路径下全部大小大于900的项目都保存在变量中并显示在控制台中:
使用Group-Object(group)对列表项或者输出结果进行分组,指定的属性包含相同值的组对象。Group-Object 返回一个表,其中每一个属性值对应一行,同时一个列显示具备该值的项目数。
还可让返回的对象是个HashTable——key-value的键值对数组,指定-AsHashTable参数:
使用Measure-Object(measure)计算对象的数字属性以及字符串对象(如文本文件)中的字符数、单词数和行数。它计算某些类型对象的属性值。Measure-Object 执行三种类型测量,具体取决于命令中的参数。能够对对象计数并计算数字值的最小值、最大值、总和及平均值。对于文本对象,它能够计数并计算行数、单词数和字符数。
a) 计算当前路径下项目的总数:
b) 计算当前路径下项目的长度的最小值、最大值以及平均值:
c) 计算当前文件中字符、行、单词的总数:
用Compare-Object(别名是compare和diff)能够将两组对象进行比较,一组对象为Reference组,而另外一组为Difference组。比较的结果将指示属性值是只出如今 Reference 组中的对象中(由 <= 符号指示),或是只出如今 Difference 组中的对象中(由 => 符号指示),抑或(在指定了 IncludeEqual 参数的状况下)同时出如今这两个对象中(由 == 符号指示)。
用ConvertTo-Html能够将Microsoft.Net Framework对象转换为可在Web浏览器中显示的HTML:
用Export-Csv(别名是epcsv)将 Microsoft .NET Framework 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串,并将这些字符串保存到一个 CSV 文件中。
Format-List(别名是fl)能够将输出的格式设置为属性列表,其中每一个属性均各占一行显示:
Format-Table(别名是ft)能够将输出的格式设置为表:
Format-Wide(别名是fw)能够将对象的格式设置为只能显示每一个对象的一个属性的宽表:
使用Get-Unique(别名是gu)能够从排序列表中返回惟一项目。
可使用Out-File将输出发送到文件:
管道操做的时候常常会用到管道输入对象的属性,使用Get-Member(gm)来获取对象的属性和方法。
a) 获取对象的公有属性:
b) 获取对象的公有方法:
当得知对象的公有属性和方法的名字后,就能够在管道操做中使用了。
学会使用管道后,得学会判断一个命令是否支持管道输入。使用Get-Help命令获取一个命令的使用方法,对于参数,能够看到是否支持管道输入,或者经过MSDN去查询命令帮助。
好比PowerShell Core里面的Where-Object的MSDN的帮助站点是:https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.core/Where-Object。
对于里面的-InputObject则是支持管道输入,-Is则不支持管道输入:
好比PowerShell Core里面的Move-Item的MSDN的帮助站点是:https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.management/Move-Item。
对于里面的-Path则是支持管道输入,-UseTransaction则不支持管道输入:
对于没有任何一个参数支持管道输入的命令则是不支持管道输入的命令。
若是要对大量的数据进行处理简单的任务,能够把数据保存在一个CSV文件里面,使用Import-Csv来导入数据,导入后为每一行自动建立对象,并将列的名字做为对象的属性,以后用foreach对数据的每一项进行操做。
若是你命名的CSV文件中的列的名字和管道使用的参数名一致,PowerShell能够实现这种部分或所有参数的映射。
PowerShell的一个主要的优势就是具备自动化重复性任务的能力。有时候,这些重复性的任务是动做密集的(如系统维护,操做注册表,或者文件清理),而且包括复杂的有顺序的互相调用的命令。在这种状况下,能够经过编写脚本将这些操做组合到一块儿,这样能够节省时间,下降错误的发生。
上述列举的只是经常使用的命令和使用方法,PowerShell强大的命令集彻底不止这些。
[原创文章,转载请注明出处,仅供学习研究之用,若有错误请留言,如以为不错请推荐,谢谢支持]
[原文:http://www.cnblogs.com/lavender000/p/6941393.html,来自永远薰薰]