如何使用Get-ChildItem | Where-Object
使用通配符将结果过滤为类似的格式?
ApplicationName 20XX - English
无论我使用什么通配符或运算符(-match
,-like
,-eq
),它都不会返回任何内容,或者返回超出我想要的值。
基本上,我只希望数字被“通配”以搜索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
不是首选。
答案 0 :(得分:2)
使用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"'
答案 1 :(得分:1)
表示通配符。最简单的是:
Where-Object DisplayName -like 'Application 20* - English'
或在正则表达式中:
Where-Object DisplayName -match 'Application 20.* - English'
Where-Object DisplayName -match 'Application 20.. - English'
您可以使用get-childitem尝试-path:(-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可能更快,但也可以匹配文件名的简短版本。