2013-05-07 4 views
9

Ich versuche einen Weg zu finden, wie dieser Befehl aus einem Array von Werten im Gegensatz zu einem Wert gefiltert werden kann. Derzeit ist dies, wie mein Code (und es funktioniert, wenn $ ExcludeVerA ein Wert ist):Verwenden von Powershell "Where" -Befehl zum Vergleich mit Array von Werten

$ExcludeVerA = "7" 

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

und ich möchte $ ExcludeVerA ein Array von Werten haben, wie so (dies zur Zeit nicht funktioniert):

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

foreach ($x in $ExcludeVerA) 
{ 

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

} 

Irgendwelche Ideen, warum dieser zweite Block des Codes nicht funktioniert oder andere Ideen, was ich tun kann?

Antwort

14

Versuchen -notcontains

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

so, wenn ich es corretly verstehen, dann

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

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

, dass eine direkte Antwort auf Ihre Frage. Mögliche Lösung könnte in etwa so aussehen:

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

es verwendet Regex, um Arbeit zu erledigen.

+0

Der erste Weg nicht funktioniert, weil der $ _ Version Eigenschaften dieser Objekte ist in der Regel eine lange Zahl wie:. 7.01.04756 und ich brauche nur die erste Zahl filtern (dh ich muss 7 * suchen). – ThreePhase

+0

Die zweite Art, wie Sie mit regulären Ausdrücken geschrieben haben, funktioniert jedoch wunderbar! Und es ist einfach und elegant. Es hat mich auch zu regulären Ausdrücken geführt, also vielen Dank dafür :) – ThreePhase

2

Try this:

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

Das ist, ich brauche es um nicht 7 *, nicht nur 7, wie die Versionsnummern neigen dazu, lang zu sein (aber das Zeug nach der 7 ist egal. Die Verwendung von regulären Ausdrücken, wie sie in Stejs Antwort vorgeschlagen wurden, hat den Trick gelingen lassen. – ThreePhase