1. 管道(pipeline)是什么
在Shell中一个重要的基本概念就是管道(pipeline),即在一组命令中,输出的命令结果成为下一个命令的输入参数。管道的概念与真实生活中的生产线比较相似:在不同的生产环节进行连续的再加工,如下图例子:
“Get-ChildItem”意思是获取当前路径的所有项目,“|Where-Object {$_.Length -gt 200}”意思是查看上一步结果,取所有长度大于200的项目,“|Sort-Object -Descending Name”意思是查看上一步结果,按照Name进行倒叙排列。
在PowerShell中,使用管道符号(|)来划分管道中的每个命令,上述例子说明了管道的强大功能,同时PowerShell在管道中传递的是高保真对象,不仅仅是文本描述。
下面主要给大家介绍一下常用的管道处理命令。
2. Where-Object:过滤列表项或命令输出结果
可以使用Where-Object(别名是where和?)从列表或者命令输出结果中过滤选择你需要的项目。
对于输入的每一项,Where-Object都会根据{}中定义的脚本块对输入进行计算,如果返回True,则输出,否则不输出。如下例子:
{}表示一个脚本块,可以输入一系列PowerShell命令,其中$_代表当前输入对象,在这个例子中,$_就代表一个文件项目。-gt是比较操作符,意思是大于,关于比较操作符的介绍如下:
PowerShell中比较操作符是用于对表达式进行比较的。默认情况比较操作符不区分大小写,如果想要区分,需要使用-C前缀,不需要区分的,使用-I前缀。
所有可用的比较操作符如下表格:
操作符 |
意义 |
返回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" |
3. ForEach-Object:处理列表或者命令输出的每一个项目
使用ForEach-Object命令(别名是foreach和%)来处理列表中的每一项。
使用例子如下:
例子中1..10的意思是简单声明了一个1~10的一组数字。其中处理列表中每一项还可以用for、foreach、do和while等,以后会更详细的介绍。
4. Select-Object:选择列表项或输出结果只输出要的结果
使用Select-Object(别名是select)对象可以选择一个对象或者一组对象的指定属性。还可以从对象的数组中选择唯一的对象,也可以从对象数组的开头或末尾选择指定个数的对象。
如果使用 Select-Object 来选择指定属性,则它会从输入对象中复制这些属性的值,并创建具有指定的属性和复制的值的新对象。使用 Property 参数指定您要选择的属性。或者,使用 First、Last、Unique、Skip 和 Index 参数从输入对象数组中选择特定对象。
使用例子如下:
a) 选择当前路径下所有项目的Name和Length属性:
b) 选择当前路径下前三个项目:
c) 选择当前路径下所有项目的Name和自定义属性,名字叫做Last Modified Day,结果是通过LastWriteTime属性算出来的:
d) 选择当前路径下第一个和第六个项目:
e) 选择当前路径下除第五个项目外的所有项目:
本文章地址http://www.vzeo.com/news/xuetang/800695.html 由 友站网 编辑整理,转载请注明出处