正文  电脑教程 > 服务器教程 >

PowerShell管道入门教程

  1. 管道(pipeline)是什么   在Shell中一个重要的基本概念就是管道(pipeline),即在一组命令中,输出的命令结果成为下一个命...

  1. 管道(pipeline)是什么

  在Shell中一个重要的基本概念就是管道(pipeline),即在一组命令中,输出的命令结果成为下一个命令的输入参数。管道的概念与真实生活中的生产线比较相似:在不同的生产环节进行连续的再加工,如下图例子:

PowerShell管道入门教程

  “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) 选择当前路径下除第五个项目外的所有项目: