Использование Powershell "где" для сравнения с массивом значений

Я пытаюсь найти способ заставить эту команду фильтровать массив значений, а не одно значение. В настоящее время мой код выглядит так (и он работает, когда $ExcludeVerA имеет одно значение):

$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]'}
Другие вопросы по тегам