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:選擇列表項或輸出結果只輸出要的結果