PowerShell 技能连载 - 过滤文件
您可能还没有注意到,Get-ChildItem
(也叫做 dir
或者 ls
) 的 -Filter
参数并不是像您所想的方式工作。以下代码的本意是只查找 PowerShell 脚本,但实际上找到的结果更多:
1 | Get-ChildItem -Path $env:windir -Filter *.ps1 -Recurse -ErrorAction Silent | |
以下是查找结果:
1 | Count Name |
-Filter
参数的作用和传统的 dir
命令的行为类似。要真正起到您想要的效果,您应该使用以下代码:
1 | Get-ChildItem -Path $env:windir -Filter *.ps1 -Include *.ps1 -Recurse -ErrorAction SilentlyContinue | |
以下是正确的结果:
1 | Count Name |
虽然您可以省略 -Filter
参数,但强烈建议保留着它。首先,-Include
只能和 -Recurse
配合使用其次,-Include
速度很慢。先用一个粗略(但是快速)的 -Filter
过滤,然后用 Include
是最佳实践。
PowerShell 技能连载 - 过滤文件