使用通配符过滤

Filtering with wildcards

如何使用通配符过滤结果,使之成为这样 Get-ChildItem | Where-Object

ApplicationName 20XX - English

无论我使用什么通配符或运算符(-match-like-eq),它returns什么都没有,或者比我想要的更多。

基本上,我只希望数字为 'wildcarded' 以搜索 2017-2020,而字符串的其余部分为静态。这可能吗?

我的想法是这样的,但不幸的是我无法让它发挥作用:

Where-Object DisplayName -eq 'Application 20[17-20] - English'   
Where-Object DisplayName -Match 'Application 20%% - English'   
Where-Object DisplayName -eq 'Application 20* - English' 

这里的重要性在于只有数字是相对的。

注意:不幸的是,Get-WMIobject 在此设置中不是首选。

使用 PowerShell 通配符模式(注意它是 -like 运算符,而不是 -eq-match):

# matches 2010 through 2029
Where-Object DisplayName -like 'Application 20[1-2][0-9] - English' 

# or, narrowly matching only 2017 through 2020
Where-Object {$_.DisplayName -like 'Application 201[7-9] - English' -or $_.DisplayName -like 'Application 2020 - English'}
另一方面,

-match 支持正则表达式,它允许交替模式:

Where-Object DisplayName -match 'Application 20(?:1[7-9]|20) - English' 

我知道您提到不想将过滤卸载到 WQL,但如果您愿意,您可以:

Get-CimInstance -Class Win32_WhateverClassYouQuery -Filter 'DisplayName LIKE "Application 201[7-9] - English" OR DisplayName = "Application 2020 - English"'

-like 用于通配符。最简单的是:

Where-Object DisplayName -like 'Application 20* - English' 

或者在正则表达式中:

Where-Object DisplayName -match 'Application 20.* - English'   
Where-Object DisplayName -match 'Application 20.. - English'   

您可以尝试使用 -path 和 get-childitem:(-filter 不支持方括号)

get-childitem -path 'Application 20[1-2][07-9] - English'   
get-childitem -path 'Application 20* - English'   
get-childitem -path 'Application 20?? - English'   
get-childitem -filter 'Application 20* - English'   
get-childitem -filter 'Application 20?? - English'   

-filter 可能更快,但也匹配文件名的短版本。