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:
Mein Filter sieht so aus:
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?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 312823
Url: https://administrator.de/contentid/312823
Ausgedruckt am: 05.11.2024 um 04:11 Uhr
2 Kommentare
Neuester Kommentar
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
Or create an object from your array
Regards
$NeuesArray = $AltesArray | ?{$_ -ne 'Start,1,Box'}
$NeuesArray = $AltesArray | ?{$_.split(',') -ne 'Start' -and $_.split(',')[1] -ne '1' -and $_.split(',')[2] -ne 'Box'}
$neuesArray = $altesArray | ConvertFrom-CSV -delimiter ',' | ?{$_.Value1 -ne 'Start' -and $_.Value2 -ne '1' -and $_.Value3 -ne 'Box'}