In diesem Kapitel steht alles über das Thema Import-CSV mit Powershell. Alle Befehle die ich bisher gebraucht habe sind hier mit Bildern Beschrieben. Sollte etwas unklar oder unvollständig oder sogar falsch sein, bitte ich einfach ein Kommentar zu hinterlassen.

Die folgenden Kapitel stehen zur Verfügung:

  1. csv Datei importieren
  2. nur bestimmte Spalten anzeigen
  3. Semikolon oder anderes Trennzeichen
  4. Sortieren (aufsteigend und absteigend)
  5. Neue Spalte hinzufügen – statischer Text
  6. Neue Spalte hinzufügen – dynamischer Text
  7. Header ändern
  8. Bearbeitete csv speichern
  9. Bearbeitete csv speichern ohne “#TYPE Selected.System.Management…”
Vorraussetzung:
  1. Klar, Powershell ist installiert :-)
  2. Man befindet sich in einem Ordner oder man weiß wo sich die csv Datei befindet.
  3. als Empfehlung die Beispieldatei (mit rechtsklick – Ziel speichern unter)

CSV importieren

Befehl:

import-csv .\beispiel.csv

import-csv Erklärung:

Ich befinde mich in dem Ordner “E:\Website\n3tblog\Powershell”. In diesem Ordner befindet sich eine Datei namens beispiel.csv. Diese Datei importiere ich mit dem Befehl “import-csv”, also keine große Kunst. Hinter dem Befehl kommt die Datei und wie man sehen kann habe ich “.\” vor meiner Datei, was Powershell soviel sagt wie Datei befindet sich im aktuellen Ordner. Ich könnte also auch “E:\Website\n3tblog\Powershell\beispiel.csv” eingeben.

Nur bestimmte Spalten anzeigen

Befehl:

import-csv .\beispiel.csv | Select-Object Stunde,Montag,Mittwoch

bestimmte_spalten Erklärung:

Wir importieren wie gehabt die Datei, hängen an die Pipe (der “|” Strich) aber noch den Befehl “Select-Object” und die Werte (Spalten Namen) an. Ich habe Stunde, Montag und Mittwoch ausgewählt. Man könnte aber beliebig viele Spalten Anzeigen lassen, sogar die Reihenfolge lässt sich dadurch ändern. Also könnte man, wenn man die Zeile von Links nach rechts liest, sich das in etwa so vorstellen: Importiere die Datei | Zeige mir dann aber nur die Spalte Stunde, Montag und Mittwoch an. Eigentlich keine große Kunst und das war noch nicht mal schwierig, oder?

Semikolon oder anderes Trennzeichen

Befehl:

import-csv .\beispiel.csv -Delimiter “;”

semikolon_mit_deli Erklärung:

Powershell geht standardmäßig davon aus, dass die zu importierende Datei Komma getrennt ist. Wir müssen der Powershell also mittweilen, welches Trennzeichen verwendet wird und das tun wir mit dem Parameter “Delimiter” auf deutsch Trennzeichen. Tun wir das nicht, schaut das Ergebnis folgendermaßen aus: semikolon_ohne_deli Wie man sieht haben wir hier nicht diese schöne Spaltenansicht.

Sortieren (aufsteigend und absteigend)

Befehl:

import-csv .\beispiel.csv | Sort Montag

Sortieren Erklärung:

Wir importieren wieder unsere csv Datei und ängen an die Pipe den Befehl Sort an. Sort ist die Abkürzung für Sort-Object. Wir hätten also auch Sort-Object verwenden können. Anschließend kommt noch der Name der Spalte wonach wir sortieren wollen, in meinem Fall nach Montag. Er fängt dann mit dem ersten Buchstaben des Alphabets an zu sortieren. Möchte man genau die andere Reihenfolge, also den letzten Buchstaben zuerst müssen wir noch den Befel ” -Descending” anhängen.

Befehl:

import-csv .\beispiel.csv | Sort Montag -Descending

Sortieren z-a Erklärung:

Eigentlich der gleiche Befehl wie oben nur das wir hier noch den Parameter “-Descending” anhängen. Descending steht übrigends für absteigende Reihenfolge :-)

Neue Spalte hinzufügen – statischer Text

Befehl:

$spalte = import-csv .\beispiel.csv | select Stunde,Montag,Meinung
$spalte | % {$_.Meinung = “Das ist meine Meinung”}

neue_spalte_statisch Erklärung:

Wir erstellen eine variable die ich “$spalte” genannt habe und füllen sie mit unserer Formel für den import. Ich habe hier nur die SPalten Stunde und Montag anzeigen lassen, möchte man alle Spalten in der csv Datei so lassen und nur eine neue Spalte hinzufügen solltet ihr auch “Select-Object” nehmen aber folgendes als Befehl nehmen: “import-csv .\beispiel.csv | Select-Object *,NameDerNeuenSpalte”. Mit der ersten Zeile würden wir nur eine neue Spalte bekommen, der Inhalt wäre jedoch leer. Also schreiben wir in unsere variable noch “% {$_.Meinung = “Das ist meine Meinung”}”. Das % steht für foreach-object und bedeutet grob soviel wie in jeder Zeile wo es etwas reinschreiben soll. Hier soll nun der statische Text “Das ist meine Meinung” rein.

Neue Spalte hinzufügen – dynamischer Text

Befehl:

$spalte = import-csv .\beispiel.csv | Select-Object Stunde, Montag, Meinung
$spalte | % {$_.Meinung = if($_.Montag -eq “Mathe”) {“Mathe ist toll”} elseif ($_.Montag -eq “Sport”){“Sport ist spitze”}}

neue_spalte_dynamisch Erklärung:

Auch hier nutzen die die Möglichkeit, alles in eine Variable zu schreiben und mit Foreach-Object als “%” die Spalte “Meinung” zu füllen. Diesmal kommt aber kein statischer Text in diese Spalte sondern wir wollen auf den Inhalt der anderen spalten dynamisch reagieren. Ich habe z.B. in jeder Spalte wo Mathe am Montag stattfindet ein “Mathe ist toll” in meiner Meinungsspalte stehen. Damit möchte ich nur zeigen, wie man relativ simpel auch mit Formel die Spalten füllen kann und muss nicht immer einen statischen Text reinschreiben. Die If Befehle kommen in einem anderen Kapitel dran.

Header ändern

Befehl:

import-csv .\beispiel.csv -Header Stunden,ErsterTag,ZweiterTag,DritterTag | Select-Object -skip 1

Header_umbennen

Erklärung:

Die csv Datei wird importiert und wir erstellen statisch einen neuen Header mit dem Parameter -Header. Da wir über unseren Inhalt der csv Datei statisch einen Header packen, hätten wir einmal unseren erstellten Header und einmal den Header aus der Datei. DIes können wir mit dem Befehl “Select-Object -skip 1″ umgehen.

Bearbeitete csv speichern

Befehl:

import-csv .\beispiel.csv | Select-Object Stunde,Montag,Mittwoch | Export-csv beispiel2.csv

export_csv Erklärung:

Die csv wird importiert, die erste Pipe wird abgearbeitet und anschließend exportieren wir alles. Eine Ausgabe gibt es mit diesem Befehl nicht. Als Ergebnis bekommt man aber eine csv die so aussieht: export_csv_ergebnis

Bearbeitete csv speichern ohne #TYPE Selected.System.Management…

Befehl:

import-csv .\beispiel.csv | Select-Object Stunde,Montag,Mittwoch | Export-csv beispiel2.csv -NoTypeInformation

export_csv_notype Erklärung:

Hat die gleiche Beschreibung wie “Bearbeitete csv speichern” nur das wir als Parameter ” -NoTypeInformation” anhängen. Somit wird die Zeile “#TYPE Selected.System.Management.Automation.PSCustomObject”  in der csv Datei gelöscht.