none
Gewisse Inhalte einer Zeile löschen RRS feed

  • Frage

  • Hallo Leute,

    nach jahrelangem mitlesen und profitieren von Euren Tips, muss ich heute selbst meine erste Frage stellen, denn die Hilfen, die in die richtige Richtung gehen, helfen mir nicht weiter.

    Folgendes Problem:

    Ich erstelle mit csvde eine Output Datei über alle User im AD mit einigen Attributen, die wichtig sind für diese Aktion.

    Problem ist: Der DN soll nicht drin sein, csvde baut ihn aber ein und ich bekomm ihn nicht raus.

    Da ich das csvde aus einem Powershell Sktipt starte, dachte ich: Warum nicht gleich damit den DN entfernen...

    Ausgabe ist folgende nur auf drei Zeilen gekürzt:

    DN,sn,givenName,department,sAMAccountName,telephoneNumber,mail,employeeID

    "OU=_USER,OU=test-ou,DC=my,DC=domain,DC=com",Nachname,Vorname,Abteilung,samacc,0123456,vorname.nachname@my.domain.com,personalnummer
    "OU=_USER,OU=test-ou,DC=my,DC=domain,DC=com",Mustermann,Max,GL,samacc,6543210,max.mustermann@my.domain.com,99999

    Nu soll der DN raus...ich dachte mir ich trenne auf ", (Hochkomma und Komma) da eindeutig in jeder Zeile.

    Also:

    ForEach ( $line in $output) {
        ($dn,$rest) = $line.Split("'",'")
        write "dn= $dn"
        write "rest= $rest"
        }


    Habe versucht ", mit allen Mitteln zu maskieren...die Ausgabe ist aber immer Schrott.
    Meist ist "dn=" leer und "rest=" enthält die gesamte Zeile ohne " oder ,

    Ist split vllt gar nicht angebracht an dieser Stelle?

    Bin für jede Hilfe dankbar!

    Giuseppe


    Freitag, 6. Februar 2015 12:54

Antworten

  • Wenn man mit Export-CSV arbeitet, sollte man sich mit dem Grundlagen des CSV Format auskennen.

    Das CSV Format

    Man kann sich eine CSV Datei wie eine Excel Tabelle mit Überschriften (Englisch: header) für jede Spalte in der ersten Zeile vorstellen.
    Das CSV Format ist eigentlich eine Tabelle, die nur 2 Dimensionen hat, um Daten in Zellen darzustellen.
    Die Daten stehen in Spalten und Zeilen (oder auch X,Y).

    Das Dateiformat CSV steht für Englisch: Comma-Separated Values.
    Die Regeln zu Erstellung einer CSV Datei werden im RFC 4180 von der Internet Engineering Task Force (IETF) beschrieben.
    Siehe: http://tools.ietf.org/html/rfc4180
    Siehe Wikipedia: http://de.wikipedia.org/wiki/CSV_%28Dateiformat%29

    Der Text in einer CSV Datei muss den Regeln aus dem RFC 4180 entsprechen!

    Delimiter

    Für das Trennzeichen (Englisch: delimiter), das die einzelnen Datenspalten voneinander trennt, ist das Komma vorgesehen.
    Deshalb heißt das Dateiformat auch Comma Separated Values.

    Anführungszeichen

    Wenn die Daten selbst das Trennzeichen enthalten, dann wird das Datenfeld in Doppelte-Anführungszeichen gesetzt.
    Die Doppelten-Anführungszeichen wirken wie eine Paar Klammern, die das Datenfeld einschließen.

    Beispiel CSV Daten mit Trennzeichen (Komma) in den Daten:
    Daten1,Daten2,"Daten3, mit Komma",Daten4

    Wenn die Daten selbst Anführungszeichen enthalten dann werden die Anführungszeichen mit Anführungszeichen Maskiert. Die Anführungszeichen werden verdoppelt.

    Daten mit Anführungszeichen : "Daten "mit" Anführungszeichen"
    Anführungszeichen in CSV Maskiert: """Daten ""mit"" Anführungszeichen"""

    Um die Anführungszeichen zu umgehen kann man in den meisten Programmen das Trennzeichen selber vorgeben.
    Dies kann man z,B. In der PowerShell mit dem -Delimiter Parameter bei den CSV Cmdlets.
    Da in Deutschland das Komma als Dezimaltrennzeichen genutzt wird, wird in deutschen CSV Dateien häufig das Semikolon als Alternatives Trennzeichen (Englisch: delimiter) benutzt.
    Aber auch hier können die Daten wieder das Semikolon enthalten und dann kommen die Anführungszeichen wieder zum Einsatz.

    Man kann CSV Daten nicht wie Text verarbeiten, da bei einer Textersetzung immer das CSV Format durcheinander kommen kann.
    Man sollte CSV Daten in der PowerShell IMMER mit den CSV Cmdlets verarbeiten. Nur dann ist sichergestellt,  dass das CSV Format erhalten bleibt.

    1.)
    Lass die Daten von CSVDE in eine Datei ausgeben
    Beispiel:
    CSVDE -f <C:\Pfad\Dateiname.csv>

    2.)
    Lies die Datei mit Import-CSV ein. Dann wird aus jeder Zeile der CSV Datei ein Objekt erzeugt.

    3.)
    Bei den Objekten kannst du mit Select-Objekt angeben welche Properties (Spalten) du haben möchtest.

    4.)
    Das Ergebnis von Select-Object wird wieder als CSV Datei mit Export-CSV ausgegeben.

    $Pfad = 'C:\Pfad\Dateiname.csv'
    
    # Datei mit CSVDE erstellen
    & 'CSVDE' @('-f',$Pfad)
    
    Import-CSV -Path $Pfad | Select-object sn,givenName,department,sAMAccountName,telephoneNumber,mail,employeeID | Export-Csv -NoTypeInformation -Path 'C:\Pfad\DateinameNEU.csv'  




    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Freitag, 6. Februar 2015 14:32