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:选择列表项或输出结果只输出要的结果