Jump to content

Ipfan

Newbie
  • Content Count

    8
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Ipfan

  • Rank
    Newbie
  1. 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!
  2. 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
  3. Vielen Dank BOfH_666 & MurdocX ! Ganz funktioniert es bisher noch nicht, aber ich bin auf dem richtigen Weg. Das hat mir auf jeden Fall sehr geholfen.
  4. Danke für deine Antwort. Damit werde ich mich gleich mal beschäftigen. Gibt es bei Format-Table denn die Möglichkeit Datensätze zusammenzuführen? "es kann pro Datensatz genau 1 Datensatz geben" ist natürlich Quatsch... Ich weiß allerdings auch nicht mehr, was ich schreiben wollte.
  5. Guten Morgen, ich habe ein Powershell Problem, welches ich selber nicht beheben kann bzw. bei dem ich mir nicht mehr sicher bin, ob es wirklich funktioniert auf deisem Wege. Vorab möchte ich euch einmal schildern worum es überhaupt geht. Ich habe eine Input Datei im CSV-Fornat mit vielen Benutzerdaten, aber um die ganze Sache etwas einfacher zu gestalten beschränke ich es mal auf 4 Datensätze. ID;E-Mail-Adresse;Start;Ende;Produkt 11111;max@mustermann.de;01.01.2000;;Produkt1 22222;erika@musterfrau.com;02.01.2010;;Produkt1 22222;erika@musterfrau.com;01.01.1993;31.12.2020;Produkt2 33333;john@doe.net;02.02.2020;31.12.2020;Produkt Nun möchte ich Datensätze mit der gleichen ID mittels Powershell zusammenfassen (powershell, da ich mich hier am Besten auskenne). Die ID ist pro Person einmalig Eine ID kann mehrmals vorkommen, da diese mehrere Produkte zu unterschiedlichen Zeitpunkten erworben haben kann Zu einer ID gehört immer genau 1 E-Mail-Adresse pro Datensatz gibt es immer ein Startdatum pro Datensatz kann es ein Enddatum geben, muss es aber nicht Ich habe die CSV in ein Array eingelesen und ein paar Kleinigkeiten gemacht, sodass die Daten wie oben vorliegen. Jetzt zum wirklichen Problem: Ich möchte die Datensätze nach der ID sortieren und doppelte Einträge entfernen, sodass es pro ID nur noch 1 Datensatz im Array gibt. Dies funktioniert natürlich sehr einfach mittels $daten | sort-object "ID" -unique Jetzt werden Datensätze mit der gleichen ID zusammgeführt und es wird immer das neuere Datum gesetzt, was ich verstehen kann, aber leider nicht gewünscht ist. Ich möchte immer das frühere Start Datum und das neuere End Datum haben. Mir sind keine weiteren Parameter bekannt, die hier helfen könnten. Ich könnte es über 2 Zählschleifen machen, die die Daten untereinander abgleichen und dann die gewünschten Daten zurückschreiben, aber dies würde durch die vielen Datensätze sehr lange dauern. Hat jemand von euch eine Idee? Liebe Grüße
  6. Ich danke euch wirklich sehr, dass ich in dieser kurzen Zeit so viele Antworten bekommen habe! Das sollte mir sehr geholfen haben. Ich muss es nur erstmal alles verstehen
  7. Die Quelldatei ist eine CSV und muss etwas modifiziert werden. Anschließend muss diese wieder als CSV exportiert werden, weil diese im nächsten Schritt automatisiert von einem weiteren System verarbeitet wird. Die anderen Verarbeitungsschritte habe ich mir hier bewusst gespart, da diese bereits funktionieren. Ich hänge nur daran, dass die Kundennummer immer mit einem Präfix versehen werden muss. Kannst du mir deinen Ansatz mit dem PSObject vielleicht noch näher beschreiben? Vielen Dank für die Antwort!
  8. Hallo, ich möchte über Powershell eine CSV importieren, diese filtern und leicht verändern, bevor ich diese wieder als CSV exportiere. Das Vorgehen ist bisher auch kein Problem, nur das ich die CSV nicht verändert bekomme. Folgende Schritte führe ich durch: $csv = Import-Csv -path '.\test.csv' -Encoding UTF8 -Delimiter "`t" | Select * -Exclude "Name","Vorname","Strasse","PLZ","Ort" Im weiteren Schritt muss ich die Kundennummer abrufen und hier den Wert "AA-" voranstellen, sodass aus der Nummer "123456" "AA-123456" wird. Ich habe gedacht, dass man dies mit folgenden Befehl mache kann: for ($i=0; $i -lt $csv.length; $i++){csv[$i]="AA-" + $csv[$i]} Ich habe natürlich noch diverse andere Wege probiert, aber diesen Befehl mal als Beispiel. Mittlerweile habe ich keine weiteren Lösungswege mehr, da ich in Powershell noch ein Anfänger bin. Abschließend muss ich dies natürlich noch exportieren, aber dies sollte natürlich kein Problem darstellen. Hat vielleicht von euch einer eine Idee?
×
×
  • Create New...