2013-05-07 13 views
9

Próbuję znaleźć sposób na pobranie tego polecenia do filtrowania z tablicy wartości w przeciwieństwie do jednej wartości. Obecnie jest to jak mój kod jest (i to działa, gdy $ ExcludeVerA jest jedna wartość):Używanie komendy Powershell "where" do porównania z tablicą wartości

$ExcludeVerA = "7" 

$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"} | 
where ({ $_.Version -notlike "$ExcludeVerA*" }) 

I chciałbym $ ExcludeVerA mieć tablicę wartości (tak jak to obecnie nie działa):

$ExcludeVerA = "7", "3", "4" 

foreach ($x in $ExcludeVerA) 
{ 

$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"} | 
where ({ $_.Version -notlike "$ExcludeVerA*" }) 

} 

Jakieś pomysły, dlaczego ten drugi blok kodu nie działa lub inne pomysły na to, co mogę zrobić?

Odpowiedz

14

Spróbuj -notcontains

where ({ $ExcludeVerA -notcontains $_.Version }) 

więc jeśli dobrze rozumiem corretly, następnie

$ExcludeVerA = "7", "3", "4" 

$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"} | 
where ({ $ExcludeVerA -notcontains $_.Version }) 

To było bezpośrednią odpowiedź na swoje pytanie. Możliwe rozwiązanie może wyglądać następująco:

$ExcludeVerA = "^(7|3|4)\." 
$java = Get-WmiObject -Class win32_product | 
      where { $_.Name -like "*Java*"} | 
      where { $_.Version -notmatch $ExcludeVerA} 

Używa regex do wykonania pracy.

+0

Pierwszy sposób nie działa, ponieważ $ _ właściwości wersji tych obiektów jest zwykle długa liczba takich jak:. 7.01.04756 i muszę filtrować tylko przez pierwszy numer (tj. muszę przeszukać 7 *). – ThreePhase

+0

Jednak drugi sposób, w jaki pisałeś przy użyciu wyrażeń regularnych, działa pięknie! A to proste i eleganckie. To także wprowadziło mnie do wyrażeń regularnych, więc dzięki za to :) – ThreePhase

2

Spróbuj tego:

Get-WmiObject -Class Win32_Product -Filter "Name LIKE '%Java%'" | 
Where-Object {$_.Version -notmatch '[734]'} 
+0

Chodzi o to, potrzebuję tego, aby policzyć 7 *, nie tylko 7, ponieważ numery wersji wydają się być długie (ale rzeczy po 7 nie mają znaczenia. Używanie wyrażeń regularnych, jak zasugerowano w odpowiedzi Steja, spowodowało, że dzięki. – ThreePhase

Powiązane problemy