Ipfan 0 Geschrieben 25. März 2020 Melden Teilen Geschrieben 25. März 2020 Hallo zusammen, ich bin gerade etwas am Verzweifeln, weil ich mich nach ein paar Monaten Powershell Pause, mal wieder ans Werk machen wollte. Vorab als Information ich bin absolut kein Profi in Powershell, aber habe schon einiges damit gemacht. Ich versuche das Prozedere mal ganz einfach zu schildern. Ich habe ein Array mit Kundendaten, welches ich je nach Produkten auf 2 separate Array aufteile. Dies habe ich ganz einfach gemacht mit: array2 = array1 | where-object {$_.produkt -match produkt1} und array3 = array1 | where-object {$_.produkt -match produkt1 or $_.produkt -match produkt2} | foreach-object {$_.produkt = 'TEST'] Nun habe ich das array2 mit allen Datensätze, die das Produkt 1 haben und das array3 mit allen Datensätze, die das Produkt1 oder Produkt2 haben. Alle anderen Datensätze benötige ich für das weiterarbeiten nicht. Jetzt kommt es aber zu dem was mich so sehr wundert. Alle Datensätze im array1 haben nun als Produkt ebenfalls "TEST", obwohl im Befehl nichts derartiges vorkommt. Also habe ich die Befehle zu Testzwecken aufgeteilt und habe folgendes ausgeführt: array3 = array1 | where-object {$_.produkt -match produkt1 or $_.produkt -match produkt2} Ausgabe von array2 -> alle Produkte sind produkt1 array3 | foreach-object {$_.produkt = 'TEST'] Ausgabe von array3 -> alle Produkte sind "TEST" Ausgabe von array2 -> alle Produkte sind "TEST" Aber Wieso?! Ich habe dann daraufhin noch weitere Umwege probiert: array2 = array1 | where-object {$_.produkt -match produkt1} -> array2 weiterhin nur Produkt1 array3 = array1 | where-object {$_.produkt -match produkt2} -> array3 erstmal nur Produkt2 array2_test = array2 -> eine "Kopie" von array2 array3+=array2_test -> die "Kopie" von array2 zu array3 hinzufügen, damit alle Datensätze für Produkt1 und 2 in array3 gespeichert sind array3 | foreach-object {$_.produkt = 'TEST'] -> alle Einträge von produkt auf TEST setzen Und was passiert? die Ausgabe von array2, array2_test und array3 sind für produkt identisch, alle sind jetzt plötzlich auf "TEST" geändert. Irgendwie müssen die variablen aufeinander referenziert sein, aber das habe ich so noch nie erlebt. Wie kann ich dies beheben? Liebe Grüße Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 25. März 2020 Beste Lösung Melden Teilen Geschrieben 25. März 2020 $Array1 = @' Nummer,Produkt 1,Produkt1 2,Produkt2 3,Produkt3 4,Produkt1 5,Produkt2 6,Produkt3 7,Produkt1 8,Produkt2 9,Produkt3 '@ | ConvertFrom-Csv $array2 = $array1 | where-object { $_.produkt -match 'produkt1' } | Select-Object -Property * $array3 = $array1 | where-object { $_.produkt -match 'produkt1' -or $_.produkt -match 'produkt2' } | Select-Object -Property * $array3 | foreach-object { $_.produkt = 'TEST' } $Array1 $array2 $array3 Ergibt das das erwartete Ergebnis? 1 Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 25. März 2020 Melden Teilen Geschrieben 25. März 2020 Das ist ein Objektproblem - jedes Element deiner Arrays ist ein eigenständiges Objekt. Diese Objekte hast Du jetzt in 2 Arrays aufgenommen. Änderst Du das Objekt in Array3, dann ist das natürlich das gleiche Objekt wie in Array2.... Entweder mit "Select" neue Objekte erzeugen (wie oben) oder die Arrays vorher klonen. 1 Zitieren Link zu diesem Kommentar
Ipfan 0 Geschrieben 26. März 2020 Autor Melden Teilen Geschrieben 26. März 2020 Danke für die schnelle Rückmeldung. Manchmal kann der Fehler so einfach sein.. Das Problem konnte damit endlich gelöst werden. Vielen lieben Dank! Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.