nagus
Goto Top

Power-Shell: export-CSV liefert nur sinnlose Zeichen

Moin,

bin gerade am verzweifeln:
ich möchte eine Abfrage über die AD machen. Ausgabe an der Console klappt einwandfrei. Wenn ich aber die Daten in ein CSV schreiben will, erhalte ich nur Datenmüll.

$AdInfo = (Get-ADUser -filter *  -Properties * | ft samaccountname,DisplayName,AccountExpirationDate,city, PasswordExpired, PasswordLastSet, ProfilePath -autosize)

Ausgabe mit
$AdInfo
liefert alles wie ich es will.

Wenn ich das ganze in eine CSV exportiere mit
 $AdInfo | export-csv -path c:\scripte\temp\output.csv -delimiter ";"  
erhalte ich eine CSV die wie folgt aussieht

#TYPE Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
ClassId2e4f51ef21dd47e99d3c952918aff9cd pageHeaderEntry pageFooterEntry autosizeInfo shapeInfo groupingEntry
033ecb2bc07a4d43b5ef94ed5a35d280 Microsoft.PowerShell.Commands.Internal.Format.AutosizeInfo Microsoft.PowerShell.Commands.Internal.Format.TableHeaderInfo
9e210fe47d09416682b841769c78b8a3
27c87ef9bbda4f709f6b4002fa4af63c

Wenn ich die Ausgabe mit einer Pipe umleite erhalte zwar eine Datei mit den Werten, aber ich kann nix damit anfangen, weil die Trennzeichen fehlen ... Ein Umformatieren in Excel ist nicht ohne weiteres möglich, da einzelne Spalten eben auch leer sein können

Warum klappt die Ausgabe nicht??

Thx,
Nagus

Content-ID: 443561

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

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

erikro
erikro 23.04.2019 um 15:50:36 Uhr
Goto Top
Moin,

nicht format-table, sondern select-object. Dann kommt das in die CSV, was Du willst. face-wink

hth

Erik
Nagus
Nagus 23.04.2019 um 15:59:58 Uhr
Goto Top
Hmm, da stehe ich nun auf dem Schlauch:
ich habe doch schon die Infos so wie isch sie will:

PS C:\Users\xxxx> $AdInfo

samaccountname       DisplayName                                                     AccountExpirationDate city              PasswordExpired PasswordLastSet     ProfilePath
--------------       -----------                                                     --------------------- ----              --------------- ---------------     -----------

Mit einem select-object wähle ich die ja dann noch einmal aus. Mir geht es ja um den Export in eine CSV Datei, die als Trennzeichen ein Semikolon nutzt ....
139374
Lösung 139374 23.04.2019 aktualisiert um 16:23:01 Uhr
Goto Top
Hmm, da stehe ich nun auf dem Schlauch:
Immer diese Schläuche ... Wenn du einen neuen Schlauch brauchst geh in den Baumarkt 👌

Mit einem select-object wähle ich die ja dann noch einmal aus.
Nö, du hast das kleine Wort sondern überlesen.
Erik hat's dir doch schon verraten, nutze select-object anstatt format-table, die Format-CMDLets geben dir keine vernünftigen Objekte zurück (sondern nur reine Format-Anweisungs-Objekte), die du aber für Export-CSV brauchst! Und dazu kommt eben Select statt Format zum Einsatz, denn wir wollen ja nichts anzeigen sondern die Objekte exportieren.
Also:
Get-ADUser -filter *  -Properties DisplayName,AccountExpirationDate,city, PasswordExpired, PasswordLastSet, ProfilePath | select samaccountname,DisplayName,AccountExpirationDate,city, PasswordExpired, PasswordLastSet, ProfilePath | export-csv -path 'c:\scripte\temp\output.csv' -delimiter ";" -NoType -Encoding UTF8  
erikro
Lösung erikro 23.04.2019 um 16:23:36 Uhr
Goto Top
Zitat von @Nagus:

Hmm, da stehe ich nun auf dem Schlauch:

Ja. face-wink

ich habe doch schon die Infos so wie isch sie will:

Nein, eben gerade nicht. Format-Table formatiert die Ausgabe eines Objektes als Tabelle auf dem Bildschirm. Dann sieht der Inhalt Deiner Variablen so aus:

PS C:\> $AdInfo = (Get-ADUser -filter *  -Properties * | ft samaccountname,DisplayName,AccountExpira
tionDate,city, PasswordExpired, PasswordLastSet, ProfilePath -autosize)
PS C:\> $adinfo | write-host
Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData

Deshalb steht auch in Deinem CSV kryptisches Zeug.

Machst Du das mit Select-Object, dann sieht das so aus:

PS C:\> $AdInfo = (Get-ADUser -filter *  -Properties * | select-object samaccountname,DisplayName,Ac
countExpirationDate,city, PasswordExpired, PasswordLastSet, ProfilePath)
PS C:\> $adinfo | write-host
@{samaccountname=Gast; DisplayName=; AccountExpirationDate=; city=; PasswordExpired=False; PasswordLastSet=; ProfilePath
=}

Jetzt ist das ein Array von Objekten mit ihren Eigenschaften, das Du in ein CSV exportieren kannst.

hth

Erik
Nagus
Nagus 23.04.2019 um 16:24:14 Uhr
Goto Top
Thx timeout, so funktioniert es!
Nagus
Nagus 23.04.2019 um 16:26:07 Uhr
Goto Top
Danke für die Erklärung eriko! Jetzt habe ich es begriffen!
erikro
erikro 23.04.2019 um 16:27:41 Uhr
Goto Top
Gerne