このコマンドで、1つの値ではなく、値の配列からフィルター処理する方法を見つけようとしています。現在、これは私のコードのようです(そして$ ExcludeVerAが1つの値であるときに機能します):
$ExcludeVerA = "7"
$Java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"} |
where ({ $_.Version -notlike "$ExcludeVerA*" })
そして、私は$ ExcludeVerAがそのような値の配列を持つことを望みます(これは現在動作しません):
$ExcludeVerA = "7", "3", "4"
foreach ($x in $ExcludeVerA)
{
$Java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"} |
where ({ $_.Version -notlike "$ExcludeVerA*" })
}
この2番目のコードブロックが機能しない理由や、私ができることについてのその他のアイデアはありますか?
-notcontains
をお試しください
where ({ $ExcludeVerA -notcontains $_.Version })
だから私がそれを正しく理解すれば
$ExcludeVerA = "7", "3", "4"
$Java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"} |
where ({ $ExcludeVerA -notcontains $_.Version })
それはあなたの質問への直接の答えでした。可能な解決策は次のようなものです:
$ExcludeVerA = "^(7|3|4)\."
$Java = Get-WmiObject -Class win32_product |
where { $_.Name -like "*Java*"} |
where { $_.Version -notmatch $ExcludeVerA}
それは仕事を成し遂げるために正規表現を使用します。
これを試して:
Get-WmiObject -Class Win32_Product -Filter "Name LIKE '%Java%'" |
Where-Object {$_.Version -notmatch '[734]'}