運用pipeline來迴圈執行每一次操作
阿新 • • 發佈:2019-01-27
在powershell中有很多命令都接受指令碼為引數。Where-Object 命令就是一個例子.
我展示這個例子:
Get-Process | Where-Object {$_.VirtualMemorySize -gt 104857600}
其實這行程式碼可以為列表中的每一項執行一段指令碼,在比如如下示例,我們可以通過管道去一個個傳遞:
PS C:/WINDOWS/system32> 1..10 | foreach { $_ * 2 }
2
4
6
8
10
12
14
16
18
20
它自己不是很有用,但是這項技術適合很多地方。例如,假設你要一個目錄下的所有第一行包含#backup文字檔案到c:backups目錄,可以這麼做:
dir *.txt | foreach { if ((Get-Content $_ -totalCount 1) -eq "#backup") { copy $_ c:/backups } }
這行以dir (或者Get-ChildItem) 開始,然後把結果傳遞給foreach命令。foreach 命令對每個檔案執行大括號裡面的指令碼。
這段指令碼讀取每個檔案的第一行(通過 Get-Content, 傳遞 -totalCount 1來只讀取第一行), 然後和字串#backup進行比較, 如果匹配,就複製這個檔案。