New_Blog
You must be logged in and have permission to create or edit a blog.
   
PowerShell Anwendergruppe :: Bloglist
   
PowerShell Anwendergruppe Blog
Jul 20

Written by: Rolf Masuch
20.07.2008 16:23

Hallo Community,

eines der Cmdlets, welches am häufigsten genutzt wird, ist wohl import-csv.
In loser Folge möchte ich euch einige Stolpersteine bei der Arbeit mit dem Cmdlet aufzeigen und, wenn möglich, Workarounds für einige der Schwierigkeiten anbieten.

Als Beispieldatei für den Import wird die Datei ImportDemo.csv im Pfad d:\temp verwendet. Als "echte" CSV-Datei sind die Werte in der Datei durch ein Komma getrennt.
ImportDemo.csv:
Spalte1,Spalte2,Spalte3
Wert1,Wert2,Wert3

Wenn diese Datei jetzt mit Import-Csv d:\temp\ImportDemo.csv eingelesen wird, ist die Ausgabe eine Tabelle mit Spalten und den darin enthaltenen Werten.
image

Zur weiteren Nutzung der importierten Werte in der Pipeline ist das ForEach-Object geeignet.
Das sieht dann so aus:
Import-Csv d:\temp\ImportDemo.csv | foreach {write-host $_}
Und das Ergebnis:
image

oder beim Zugriff auf die einzelnen Elemente so:
Import-Csv d:\temp\ImportDemo.csv | foreach {write-host $_.Spalte1$_.Spalte2$_.Spalte3}
image

Dabei fällt auf, das die PowerShell bei der Ausgabe die Werte durch ein Leerzeichen trennt.
Das kann bei der Weiterverarbeitung ggf. stören. Als Beispiel sei hier eine Parameterübergabe in der Form  "Domain\Account" an andere Cmdlets z.B. get-QADUser von Quest genannt. Dabei wären die Informationen Domain und Account aus unterschiedlichen Spalten einer CSV-Datei zu lesen. Hier ist der Backslash zwischen Domain und Account einzufügen. Hier sind gleich zwei Hürden zu nehmen, das Leerzeichen und der Backslash. Dieser ist als Sonderzeichen nur verwendbar, wenn er mit dem "Backtick", also dem accent grave "`\" zusammen verwendet wird.
Der Aufruf:
Import-Csv d:\temp\ImportDemo.csv | foreach {write-host $_.Spalte1"`\"$_.Spalte2"`\"$_.Spalte3}
Und das Ergebnis:

image

Jetzt muss nur noch das Leerzeichen entfernt werden. Das kann mit einer HiIlfsvariablen und der Trim() Methode erledigt werden. Später werden dann die Hilfsvariablen für die Ausgabe genutzt.
Import-Csv d:\temp\ImportDemo.csv | foreach {
$a = ($_.Spalte1).trim()
$b = ($_.Spalte2).trim()
$c = ($_.Spalte3).trim()
write-host "$a\$b\$c"}

Das Ergebnis:
image 

Neben der eigentlichen Arbeit mit Objekten in der Pipeline kann es also zwischendurch erforderlich werden die Objekte mit Zwischenschritten in die notwendige Form zu bringen bzw. nur Teile von Objektinformationen weiter zu verarbeiten. Diese "Spielerei" kann euch hoffentlich ein paar Minuten Arbeitszeit / Lernkurve sparen.
Weiterhin viel Spaß bei der Arbeit mit der PowerShell.
Rolf

powered by metaPost

Tags: