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-Key: 480857

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

Printed on: April 25, 2024 at 02:04 o'clock

Member: NordicMike
NordicMike Aug 02, 2019 at 05:42:36 (UTC)
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
Mitglied: 140447
Solution 140447 Aug 02, 2019 updated at 06:17:45 (UTC)
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  
Member: hdreise
hdreise Aug 02, 2019 updated at 07:14:32 (UTC)
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
Mitglied: 140447
Solution 140447 Aug 02, 2019 updated at 08:13:29 (UTC)
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  
Member: NordicMike
NordicMike Aug 02, 2019 at 08:10:16 (UTC)
Goto Top
Deswegen habe ich es ihm als Beschreibung gegeben, damit Du ihm nicht alles vorkauen musst face-smile
Mitglied: 140447
140447 Aug 02, 2019 updated at 08:12:06 (UTC)
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.
Member: hdreise
hdreise Aug 02, 2019 at 09:00:11 (UTC)
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
Mitglied: 140447
140447 Aug 02, 2019 updated at 09:08:42 (UTC)
Goto Top
Na dann mach et juuht.