ralfkausk
Goto Top

CSV Dateien nach Spalte sortieren und in neue Datei importieren

Hallo zusammen

Folgendes möchte ich realisieren

Ich habe csv Dateien die ich mit dem Befehl CSVDE erzeugt habe.
Die Dateien enthalten informationen aus unserem AD.
Da ich fünf (5) verschiedene Domänen abfrage muss habe ich auch fünf Dateien.
Leider sind die Spalten in den einzelnen Dateien, obwohl die Abfrage immer die gleiche ist, unterschiedlich sortiert.
(Liegt wohl daran das LDAP wumpe ist wo die einzelnen Daten stehen uns keine Sorting braucht).

Ich möchte nun diese fünf Dateien in eine importieren, wobei dabei natürlich die einzelenen Spalten immer an der gleichen Stelle sein müssen.

Lässt sich sowas realisieren?
Voraussetung für das ganze Prozedere ist die Powershell


So werden die Daten erzeugt:
csvde -s server.tld -f ausgabe.txt -r "(cn=userid)" -l "attrib1,attrib2,attrib3"

Die Ausgabe sieht dann ungefähr so aus:
Datei DOM 1
DN,attrib1,attrib2,attrib3
"CN=blablabla",inhalt1,inhalt2,inhalt3

Datei DOM 2
DN,attrib3,attrib2,attrib1
"CN=blablabla",inhalt3,inhalt2,inhalt1

Datei DOM 3
DN,attrib2,attrib3,attrib1
"CN=blablabla",inhalt2,inhalt3,inhalt1


Das Ergebniss sollte so aussehen
DN,attrib1,attrib2,attrib3
"CN=blablabla",inhalt1,inhalt2,inhalt3 (Inhalt aus Datei DOM 1)
"CN=blablabla",inhalt1,inhalt2,inhalt3 (Inhalt aus Datei DOM 2)
"CN=blablabla",inhalt1,inhalt2,inhalt3 (Inhalt aus Datei DOM 3)


bedanke mich schon mal im voraus für eure Hilfe
Gruß Ralf

Content-ID: 205574

Url: https://administrator.de/contentid/205574

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

colinardo
colinardo 24.04.2013 aktualisiert um 16:26:03 Uhr
Goto Top
Hallo Ralf,

hört sich schwierig zu realisieren an ist aber mit Powershell ein Einzeiler:
dir "C:\ORDNER\*.csv" | Import-csv -Delimiter "," | Export-Csv "C:\ORDNER\Konsolodiert.csv" -NoTypeInformation  
face-wink
Grüße Uwe
ralfkausk
ralfkausk 25.04.2013 um 11:17:23 Uhr
Goto Top
Hallo Uwe

Danke für die schnelle Hilfe.
Leider funktioniert das so nicht ganz.
Hängt möglicherweise damit zusammen das ich vergessen habe etwas zu erwähnen.

Es kommt vor das einige der abgefragten Attribute bei einem oder mehrern IDs nicht vorhanden ist.
Dadurch kommt es vor das bei der Abfrage einer Domäne, wenn z.B. keiner das Attribut gesetzt hat, die ganze Spalte nicht angezeigt wird.
(Die Abfrage ist so "nett" Datenmüll zu vermeiden)

Hast Du noch 'ne Idee?
colinardo
colinardo 25.04.2013 um 12:57:35 Uhr
Goto Top
OK habs verstanden (blöd das CSVDE dafür keine Option bietet für den Fall das ein Wert leer ist; naja egal)
Mit folgendem Script sollte es für deinen Fall gehen. Gib nur noch die Pfade zu den CSV-Dateien der jeweiligen Domains in Zeile 1-5 an, und den Pfad für die zusammengefasste CSV in Zeile 6.
$csv1 = Import-Csv "C:\domain1.csv" -Delimiter ","  
$csv2 = Import-Csv "C:\domain2.csv" -Delimiter ","  
$csv3 = Import-Csv "C:\domain3.csv" -Delimiter ","  
$csv4 = Import-Csv "C:\domain4.csv" -Delimiter ","  
$csv5 = Import-Csv "C:\domain5.csv" -Delimiter ","  
$ausgabePfad = "C:\merged.csv"  

$csvArray = $csv1,$csv2,$csv3,$csv4,$csv5
$tmpMerge = $csvArray
for ($i = 0; $i -le $csvArray.Length - 1;$i++){
    $tmpMerge = Compare-Object $tmpMerge $csvArray[@($i+1)] -PassThru -Property DN -IncludeEqual| select * -ExcludeProperty SideIndicator
}
$tmpMerge | Export-Csv $ausgabePfad -NoTypeInformation

Grüße Uwe
ralfkausk
ralfkausk 02.05.2013 aktualisiert um 11:26:00 Uhr
Goto Top
Hallo Uwe

Hat ein bisschen gedauert bevor ich weiter testen konnte.
Leider funktioniert auch diese Lösung nicht.
Leider kann ich keine Ergebnisse mitschicken (Datenschutz)
Trotzdem vielen dank für deine Hilfe.

Außerdem ist mir gerade noch was eingefallen
Da nicht alle Bentuzerkonten die gleichen Informationen enthalten fehlen teilweise Spalten.
Dadurch entstehen natürlich auch Dateien in denen z.B. die Spalte "Mobilnummer" komplett fehlt!

Sorry für die verspätete Info
colinardo
colinardo 02.05.2013 um 11:25:07 Uhr
Goto Top
Zitat von @ralfkausk:
Leider funktioniert auch diese Lösung nicht.
Hier geht's einwandfrei ...