Windows PowerShell: Text, XML und CSV — Ach mein

In Windows PowerShell gibt es verschiedene Möglichkeiten des Umgangs mit Textformatierung, eine umfassende aber oft auch verwirrende Funktionalität.

Don Jones

Ein gelegentlich verwirrend Aspekt von Windows PowerShell ist die Vielfalt der Möglichkeiten, die in denen Text-Formate verarbeitet. Hier ist eine schnelle Quiz: Was sind die Unterschiede zwischen diesen drei Befehlen?

Get-Service | Out-File services.txt Get-Service | Export-CSV services.csv Get-Service | Export-CliXML services.xml

Alle drei dieser Befehle wird technisch eine Textdatei erzeugen. Sie können diese drei Dateien im Windows-Editor öffnen und den Inhalt lesen. Zwei dieser Dateien, verwenden jedoch Text zum Darstellen von Daten in eine durch Trennzeichen getrennte Format. Gibt es zusätzliche Struktur innerhalb der Datei, die hilft, die Informationen zu trennen, die Sie erstellt haben.

Die folgenden drei Befehle sind legal und ohne Fehler ausgeführt werden:

Get-Content services.txt Get-Content services.csv Get-Content services.xml

Nur einer dieser Befehle sinnvoll, jedoch. Das erste ist das einzig vernünftige. Es liest nur eine, bei unbegrenzter Text-Datei. Es ist nicht Ausgangskapazität, da schaut man sich die Datei es klar formatiert ist.

Es ist zwar in gewisser Weise menschlichen formatiert. Der Text ist in einer schönen einspaltigen Tabelle. Die Daten ist in einer Weise ausgelegt, die für unsere Augen und Gehirn sinnvoll ist. Es ist nicht in einer Weise organisiert, die einen Computer der einzelnen Bits der Daten leicht erkennen lässt.

Dies ist ein Konzept, das viele Windows PowerShell-Neulinge zu sorgen. Es gibt eine einfache Mnemotechnik verwende ich dabei helfen. Wenn du es aus der Schale mit einem Befehl exportieren, bringen Sie es zurück in die Shell mit einem Importbefehl. Wenn Sie exportieren nicht verwendet haben, dann verwenden Sie nicht importieren. Import und Export sind paarweise Verben. Sie sollten immer zusammen gehen. Also, wenn Sie dies getan haben:

Get-Service | Export-CSV services.csv

Dann würden Sie dies auch tun:

Import-CSV services.csv

Der Export-CSV-Befehl nimmt Daten – in diesem Fall die Daten sind Informationen über Dienste — und schreibt diese Daten in eine Datei. Die Daten der einzelnen Bits werden durch Kommas getrennt, denn das ist, was das CSV-Format verwendet. Das bedeutet, dass die Service-Namen, Status usw. sind alle durch Kommas getrennt. Beim Lesen von Daten mit Import-CSV analysiert die Kommas Windows PowerShell, re-separates die Daten und die Originaldaten rekonstruiert. Vergleichen Sie die Ergebnisse mit den Ergebnissen dieses Befehls:

Get-Content services.csv

Dieser Befehl liest den Text, aber nicht alles mit ihm tun. Der Bildschirm füllt sich mit kommagetrennten Werten, aber Windows PowerShell nicht wirklich trennen Sie die Werte für Sie. Sie sind gerade erst die rohe, nicht analysierte Text, der alle Get-Content ist immer tut. Get-Content produziert technisch, ein String-Objekt für jede Zeile der Textdatei. Das ist in bestimmten Situationen nützlich, aber es ist nicht in der Regel, was Sie tun müssen, mit einer CSV-Datei.

Diese ganze Situation ist analog zu etwas, das Sie wahrscheinlich in Windows als auch erlebt haben. Öffnen einer CSV-Datei in Editor und was bekommt man? Sie sehen eine Reihe von Text. Das ist im Grunde, was tut, Get-Content. Öffnen Sie nun, dass gleiche CSV Datei in Excel, und was Sie sehen? Es bricht der CSV-Datei aufteilen der Daten in Spalten der Tabelle. Dies ist sehr ähnlich, was, Import-CSV tut.

Warum ist das wichtig? Nehmen wir an, dass Sie Ihre eigenen CSV-Datei erstellen. Gehen Sie voran und Sie mithilfe von Editor eine Datei erstellen, die sieht so etwas wie dieses (Poor Greg Shields nie tut gut in diesen Beispielen):

Name,SamAccountName,Department,Title,City DonJ,DonJ,IT,CTO,Las Vegas GregS,GregS,Custodial,Janitor,Denver

Speichern Sie diese Datei als Users.csv auf Ihrer Festplatte, und gehen Sie zu einer Windows PowerShell Prompt. Ohne tatsächlich ausführen, können Sie sich vorstellen was jeder dieser zwei Befehle werden tun?

Get-Content Users.csv | New-ADUser Import-CSV Users.csv | New-ADUser

Diese beiden nehme an, Sie habe bereits laufen Import-Module ActiveDirectory um das Microsoft Active Directory-Modul zu laden, die im Lieferumfang von Windows Server 2008 R2 und in das Windows 7 Remote Server Administration Tools-Paket verfügbar ist.

Der erste Befehl funktioniert nicht. Denn Get-Content ist nicht analysieren der Datei ist. Es sendet nur ein Bündel von rohen Zeichenfolgen zu New-ADUser. Und New-ADUser wird nicht in der Lage, etwas sinnvolles mit ihnen zu tun.

Die zweite Befehl funktioniert, da die Shell die CSV-Datei analysiert, break it down in einzelne Teile der Daten und diese an New-ADUser senden. Da Datenteile — Name, SamAccountName, Abteilung, Titel und Stadt — haben denselben Namen wie die entsprechenden Parameter von New-ADUser, wird das zweite Cmdlet zwei neue Benutzer haben, die Informationen aus der CSV-Datei erstellen.

Das ist der Unterschied zwischen der Arbeit mit Klartext (Out-File und Get-Content) und Datentrennung (Import/Export). Mit XML-Dateien (Export-CliXML und Import-CliXML) ist sogar besser, weil sie komplexere Datenstrukturen wie hierarchische Daten darstellen können. CSV-Dateien sind ein flaches Format, das nur eine einzige Ebene Daten darstellen kann.

Wickeln Ihren Kopf um diese Unterschiede ist eine der wichtigsten Dinge, die Sie, in der Shell tun können. Möglichkeit zum Bearbeiten von Daten in der Pipeline ist eines der Dinge, die Windows PowerShell so kraftvoll macht. Verbringen Sie einige Zeit, um sicherzustellen, Sie verstehen alle Unterschiede – sowohl subtil und nicht so subtil.

Don_Jones

**Don Jones**ist ein Microsoft MVP Award Empfänger und Autor der "Lernen Sie Windows PowerShell in ein Monat der Mittagessen" (Manning Publications, 2011), ein Buch soll helfen, jeder Administrator mit Windows PowerShell zustande. Jones bietet öffentlichen und vor-Ort-Training an Windows PowerShell. Sie erreichen ihn über ConcentratedTech.com oder bit.ly/AskDon.

Verwandter Inhalt