powershell Get-ChildItem给出了多个-Filters

时间:2015-05-10 11:38:18

标签: powershell

-Filter Get-ChildItem属性的语法是否允许您同时应用多个过滤器?即如下所示,我希望在两者中找到一些不同但具体名称的.dll,并使用通配符?

Get-ChildItem -Path $myPath -Filter "MyProject.Data*.dll", "EntityFramework*.dll"

或者我需要将其拆分为多个Get-ChildItem调用吗?因为我正在寻找管道结果。

3 个答案:

答案 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”。