在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进行比较, 如果匹配,就复制这个文件。