Powershell中的「-contains」運算符需要完全匹配(無通配符)。 「 - 匹配」運算符允許通配符和部分匹配。如果我想對可能的匹配列表執行部分/通配符匹配,那麼我應該如何執行此操作?使用Powershell中的另一個列表在列表中搜索部分匹配
例如:
$my_match_list = @("Going","Coming","Leaving","Entering")
$my_strings_list = @("Going home", "Coming over", "Leaving the house", "Entering a competition")
「走出去」將-match「回家」,但$ my_strings_list不會-contains「走出去」 現在我工作圍繞這通過循環,但它不」看起來應該是最好的方式:
foreach($i in $my_strings_list){
foreach($y in $my_match_list){
if($i -match $y){
do.something
}
}
}
我應該如何解決這個問題? 對於具體的任務,我實際上是爲所有匹配1個描述的用戶查詢一個大的AD數據庫。我希望它看起來儘可能整潔。我有類似的東西:
$myVar = get-aduser -filter {blah -ne blah} -properties description | ?{$_.description -match "blah1" -or (etcetcetc)
但它成爲過濾器字符串中可能匹配的一個可怕的長長的清單。然後我把所有東西都放到一個變量中,然後處理出我想要的實際匹配。但看起來我應該能夠以更少的線路完成任務。也許只有1長的正則表達式字符串,並將其放入過濾器?
|?{$_.description -match "something|something|something|something"
?
編輯:正則表達式可能是最短的我猜:
$my_match_list = "going|coming|leaving|entering"
foreach($i in $my_strings_list){if($i -match $my_match_list){do.something}}
所以:
get-aduser -filter {blah -ne blah} -properties description | ?{$_.description -match $my_match_list}
我寧願更多的東西,如「獲取,等等等等| {$ _描述? $ my_match_list},因爲它更容易添加東西比把它們添加到一個正則表達式的列表。
然後將它們添加到列表中,並轉換爲正則表達式。 '$ filter =「($($ ArrayOfStuff -join」|「))」'將@(「Bob」,「June」,「Michael」)'變成'「(Bob | June | Michael)」' – TheMadTechnician
是天才。謝謝。 – BSAFH