derhoeppi
Goto Top

PowerShell Where-Object multiple Conditions

Hallo,

ich habe ein Array das mit Where-Object gefiltert wird. Beim Aufbau des Filters stehe ich jedoch vor einem Problem, weil ich mit einer -and Verknüpfung nicht das Ziel erreiche, welches ich mir ausgedacht habe.

Die Ausgabe meines Array sieht folgendermaßen aus:
Value 1, Value2, Value3
Start,1,Box
Stop,2,Kiste
Stop,1,Box

Mein Filter sieht so aus:
$NeuesArray = $AltesArray | ?{$_.Value1 -ne "Start" -and $_.Value2 -eq "1" -and $_.Value3 -like "Box"}  

Mein Problem ist das er nun jede Bedingung auf True prüft (steht ja auch so dort). Wie aber in meinem Array abgebildet gibt es nur ein Item auf den die Bedingungen zutreffen. Ich möchte aber eigentlich erreichen, dass ich Item 1 und 2 erhalte.
Das bedeutet ich möchte alle Items erhalten, nur eben nicht die Kombination "Start,1,Box". Die Prüfung auf nur eine Bedingung bringt mir nichts, weil sonst relevante Daten aus dem Array verschwinden.

Vermutlich muss ich mein bestehendes Array durch eine Foreach Schleife laufen lassen, die die einzelnen Bedingung Item für Item prüft. Gibt es dafür jedoch einen Einzeiler?

Content-ID: 312823

Url: https://administrator.de/forum/powershell-where-object-multiple-conditions-312823.html

Ausgedruckt am: 25.12.2024 um 04:12 Uhr

129813
Lösung 129813 17.08.2016 aktualisiert um 10:46:14 Uhr
Goto Top
Your array lines are strings and have no properties (you told us nothing about objects!) so you have to compare by the whole string, or split up the line be the delimiter
$NeuesArray = $AltesArray | ?{$_ -ne 'Start,1,Box'}  
$NeuesArray = $AltesArray | ?{$_.split(',') -ne 'Start' -and $_.split(',')[1] -ne '1' -and $_.split(',')[2] -ne 'Box'}  
Or create an object from your array
$neuesArray = $altesArray | ConvertFrom-CSV -delimiter ',' | ?{$_.Value1 -ne 'Start' -and $_.Value2 -ne '1' -and $_.Value3 -ne 'Box'}  
Regards
derhoeppi
derhoeppi 17.08.2016 um 10:54:54 Uhr
Goto Top
So ich habe es nun via Foreach-Schleife gelöst.