Jump to content

Powershell foreach-object


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

 

 

 

 

 

 

 

 

 

 

 

Link zu diesem Kommentar
  • Beste Lösung
$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?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...