Использование команды Powershell "where" для сравнения с массивом значений
Я пытаюсь найти способ получить эту команду для фильтрации из массива значений, а не одного значения. В настоящее время это как мой код (и он работает, когда $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*" })
}
Любые идеи о том, почему этот второй блок кода не работает или другие идеи о том, что я могу сделать?
Ответы
Ответ 1
Попробуйте -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}
он использует regex для выполнения заданий.
Ответ 2
Попробуйте следующее:
Get-WmiObject -Class Win32_Product -Filter "Name LIKE '%Java%'" |
Where-Object {$_.Version -notmatch '[734]'}