powershell Get ChildItem给定多个筛选器

powershell Get ChildItem给定多个筛选器,powershell,Powershell,Get ChildItem的-Filter属性是否有语法允许您同时应用多个筛选器?i、 类似下面的东西,我想找到一些不同但特定的命名为.dll的东西,并在两者中使用通配符 Get ChildItem-Path$myPath-Filter“MyProject.Data*.dll”、“EntityFramework*.dll” 或者我需要将其拆分为多个Get ChildItem调用吗?因为我希望通过管道传递结果。您只能将一个值与-Filter一起使用,而-Include可以接受多个值,例如“.dll

Get ChildItem
-Filter
属性是否有语法允许您同时应用多个筛选器?i、 类似下面的东西,我想找到一些不同但特定的命名为.dll的东西,并在两者中使用通配符

Get ChildItem-Path$myPath-Filter“MyProject.Data*.dll”、“EntityFramework*.dll”


或者我需要将其拆分为多个Get ChildItem调用吗?因为我希望通过管道传递结果。

您只能将一个值与
-Filter
一起使用,而
-Include
可以接受多个值,例如“.dll,*.exe”。

Get ChildItem
中的
-Filter
参数只支持单个字符串/条件AFAIK。有两种方法可以解决您的问题:

您可以使用
-Include
参数,该参数接受多个字符串进行匹配。这比
-Filter
慢,因为它在cmdlet中执行搜索,而
-Filter
在提供级别上执行(在cmdlet获取结果以便处理结果之前)。然而,它很容易写和工作

#You have to specify a path to make -Include available, use .\* 
Get-ChildItem .\* -Include "MyProject.Data*.dll", "EntityFramework*.dll"
您还可以使用
-Filter
获取所有DLL,然后在where语句中过滤掉所需的DLL

Get-ChildItem -Filter "*.dll" .\* | Where-Object { $_.Name -match '^MyProject.Data.*|^EntityFramework.*' }

您可以在管道中连接过滤器结果,如下所示:

@("MyProject.Data*.dll", "EntityFramework*.dll") | %{ Get-ChildItem -File $myPath -Filter $_ }

我认为值得一提的是,
-Include
只有在与
-Recurse
一起使用时才会成功,就像您在示例中所做的那样。@FrodeF。我错过了它,因为它不是粗体、下划线、斜体,并且有一个闪烁的标志,上面写着实时代码。如何找到同时包含MyProject.Data*.dll和EntityFramework*.dll的文件夹?尝试(未测试):
Get ChildItem-Filter“*.dll”-递归|组对象目录名| Where对象{($.Group.Name-match'^MyProject\.Data')-和($\u.Group.Name-匹配“^EntityFramework\”)}|选择Object-ExpandProperty Name
你可以使用
-Include
而不使用
-Recurse
,但是你需要将
\*
添加到文件夹中。
Get ChildItem folder\*-Include*.xml,*.json
这是一个很好的答案,但是这篇文章已经有将近6年的历史了,还有两个答案和一个公认的答案是不必要的,您可能会在powershell标签中最近未回答的问题中发现更多成功