hdreise
Goto Top

Powershell, Export in CSV

Guten Morgen,

ich versuche mich gerade daran ein Export einer CSV zu gestalten.
Was ich bisher hinbekommen habe, ist es die Werte so zu exportieren.

"samaccountname";"extensionattribute15";"extensionAttribute12  
"mmusterman1";"36128236126975442";"90700800;90313800"  
"mmusterman2";"33128986h27039788";"20312801  
"

Bei einigen Benutzern hat das extensionAttribute12 zwei oder mehr Werte eingetragen. Ich versuche nun, wenn ein Benutzer weitere Werte eingetragen hat diesen in eine weitere Zeile zu übertragen.

Also so sollte das dann ausehen

"samaccountname";"extensionattribute15";"extensionAttribute12  
"mmusterman1";"36128236126975442";"90700800"  
"mmusterman1";"36128236126975442";"90313800"  
"mmusterman2";"33128986h27039788";"20312801  
"

Hab ihr vielleicht eine Lösung wie man das lösen könnte?

Gruß
Peter

Content-ID: 480857

Url: https://administrator.de/forum/powershell-export-in-csv-480857.html

Ausgedruckt am: 21.04.2025 um 22:04 Uhr

NordicMike
NordicMike 02.08.2019 um 07:42:36 Uhr
Goto Top
Ich antworte jetzt mal ohne den genauen Syntax der Powershell zu kennen, aber die Logik ist schon mal in jeder Programmiersprache die Gleiche:

Ließ die nächste Zeile in eine Variable
Splitte die Variable in mehrere Variablen mit dem Trennzeichen ;
Filtere alle Anführungszeichen heraus
Schreibe die Variable1, Variable2 und Variable3 in eine neue Datei und ein Zeilenwechsel dahinter, setze neue Anführungszeichen dazu
Falls eine vierte Variable existiert, schreibe Variable1, Variable2 und Variable4 in die neue Datei und einen Zeilenwechsel dahinter, setze neue Anführungszeichen dazu
Falls eine fünfte Variable existiert, schreibe Variable1, Variable2 und Variable5 in die neue Datei und einen Zeilenwechsel dahinter, setze neue Anführungszeichen dazu
(Überlege selbst selbst wie viel Extensions maximal vorkommen können)
Lösche Deine x Variablen und ließ die nächste Zeile ein
140447
Lösung 140447 02.08.2019 aktualisiert um 08:17:45 Uhr
Goto Top
Eigentlich ganz simpel, du brauchst nur zwei verschachtelte For Schleifen, die eine die über die User itteriert und die innere die über ein Split des Attributs itteriert und ein der innersten erzeugst du ein Custom Object mit den gewünschten Daten
$users = get-aduser -Filter * -Properties extensionAttribute15,extensionAttribute12
$data = foreach($user in $users){
    foreach($item in $user.extensionAttribute12.split(';')){  
   [pscustomobject]@{SamAccountName=$user.SamAccountName;extensionattribute15=$user.extensionattribute15;extensionAttribute12=$item}
    }
}
$data | export-csv .\Export.csv -Delimiter ';' -NoType -Encoding UTF8  
hdreise
hdreise 02.08.2019 aktualisiert um 09:14:32 Uhr
Goto Top
Vielen Danke schon mal. Für jemanden der das täglich macht bestimmt face-smile

Beim ausführen des Codes erhalte ich leider eine Meldung


Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:3 Zeichen:22
+     foreach($item in $user.extensionAttribute12.split(';'){  
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
140447
Lösung 140447 02.08.2019 aktualisiert um 10:13:29 Uhr
Goto Top
Mach halt einfach noch eine IF Abfrage rein die prüft ob der Wert des Extension Attributs nicht $NULL ist.
So weit soll man doch zumindest mit selbst mitdenken können oder?
$users = get-aduser -Filter * -Properties extensionAttribute15,extensionAttribute12
$data = foreach($user in $users){
    $attributes = $user.extensionAttribute12
    If ($attributes -ne $null){
        foreach($item in $attributes.split(';')){  
             [pscustomobject]@{SamAccountName=$user.SamAccountName;extensionattribute15=$user.extensionattribute15;extensionAttribute12=$item}
        }
     }else{
              [pscustomobject]@{SamAccountName=$user.SamAccountName;extensionattribute15=$user.extensionattribute15;extensionAttribute12=""}  
     }
}
$data | export-csv .\Export.csv -Delimiter ';' -NoType -Encoding UTF8  
NordicMike
NordicMike 02.08.2019 um 10:10:16 Uhr
Goto Top
Deswegen habe ich es ihm als Beschreibung gegeben, damit Du ihm nicht alles vorkauen musst face-smile
140447
140447 02.08.2019 aktualisiert um 10:12:06 Uhr
Goto Top
Zitat von @NordicMike:

Deswegen habe ich es ihm als Beschreibung gegeben, damit Du ihm nicht alles vorkauen musst face-smile
Damit würde der ja in 10 Jahren noch hier an der Frage rumgurken face-big-smile, es ist Freitag face-wink.
hdreise
hdreise 02.08.2019 um 11:00:11 Uhr
Goto Top
Vielen Dank für die Hilfe, ich hätte wahrscheinlich einige Wochen damit verbracht. Man muss aber auch verstehen, dass ich mich mit Programmierung nicht gut auskenne.

Ich muss mich mit meinem Vorgesetzten zusammensetzen, um in Dingen wie Powershell Scripten oder ähnliches weiterzukommen.

Danke

Wünsche allen ein schönes Wochenende
140447
140447 02.08.2019 aktualisiert um 11:08:42 Uhr
Goto Top
Na dann mach et juuht.