-Filter
Get-ChildItem
属性的语法是否允许您同时应用多个过滤器?即如下所示,我希望在两者中找到一些不同但具体名称的.dll,并使用通配符?
Get-ChildItem -Path $myPath -Filter "MyProject.Data*.dll", "EntityFramework*.dll"
或者我需要将其拆分为多个Get-ChildItem调用吗?因为我正在寻找管道结果。
答案 0 :(得分:12)
-Filter
中的Get-ChildItem
参数仅支持单个字符串/条件AFAIK。以下是解决问题的两种方法:
您可以使用接受多个字符串匹配的-Include
参数。这比-Filter
慢,因为它在cmdlet中进行搜索,而-Filter
在提供级别上完成(在cmdlet获取结果之前,它可以处理它们)。但是,它很容易编写和工作。
#You have to use -Recurse to make -Include available even though it's just a single level search
Get-ChildItem -Include "MyProject.Data*.dll", "EntityFramework*.dll" -Recurse
您还可以使用-Filter
获取所有DLL,然后在where语句中过滤掉您想要的DLL。
Get-ChildItem -Filter "*.dll" -Recurse | Where-Object { $_.Name -match '^MyProject.Data.*|^EntityFramework.*' }
答案 1 :(得分:1)
您可以像这样在管道中加入过滤器结果:
@("MyProject.Data*.dll", "EntityFramework*.dll") | %{ Get-ChildItem -File $myPath -Filter $_ }
答案 2 :(得分:0)
您只能使用-Filter对一个值进行筛选,而-Include可以接受多个值,例如“.dll,* .exe”。