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-Key: 312823

Url: https://administrator.de/contentid/312823

Printed on: April 20, 2024 at 00:04 o'clock

Mitglied: 129813
Solution 129813 Aug 17, 2016 updated at 08:46:14 (UTC)
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
Member: derhoeppi
derhoeppi Aug 17, 2016 at 08:54:54 (UTC)
Goto Top
So ich habe es nun via Foreach-Schleife gelöst.