h41msh1c0r
Goto Top

Powershell Export-CSV Spalte mit Versionsnummern ergibt Chaos

Heute ein 2tes mal,

ich habe in einem Export eine Spalte die enthält Versionsnummern.

Wenn ich dies allerdings nun durch ein Export-CSV in eine CSV schreiben lasse, macht er mir aus dem Inhalt alles mögliche nur nicht die Versionsnummern sobald die Version mehrere "." enthält.
Oft macht er aus den Zahlenketten ein Datum. Formatiert man das nachträglich sind die Inhalte allerdings trotzdem murks.

Gibt es einen Weg die Spalte explizit als Text zu deklarieren vor dem Export?

VG

Content-Key: 379727

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

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: Kraemer
Kraemer 10.07.2018 aktualisiert um 15:15:12 Uhr
Goto Top
Moin,

[String]$MeineVariable

Gruß
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 aktualisiert um 15:36:10 Uhr
Goto Top
In $Result sind z.B. 2 Spalten: Produktname und Version

$Result | Select "Produktname", @{l="Version"; e={[String]$($_)."Version"}} | Export-CSV -path $share ...  

Mit dem Konstrukt gibts allerdings nur Muuuß ^^, nur 1 Spalte "Length" und darunter ein paar Zeilen anstatt die gleichen Spalten wie in $Result mit exact dem Inhalt, nur nicht verwurstet.
Mitglied: colinardo
Lösung colinardo 10.07.2018 aktualisiert um 16:09:55 Uhr
Goto Top
Servus.
gibts allerdings nur Muuuß
Machs den Leuten hier doch nicht so schwer ...Mousse gibts bei Lafer, Lichter, Lecker aber hier?!

Das sieht mir, nach meiner Glaskugel zu Urteilen ganz danach aus als wenn das Feld Version ein Objekt mit mehreren Eigenschaften und Methoden ist. Also lass dir alle diese Objekt-Member doch mal anzeigen
$Result | select -Expand Version | fl *
und inkl. Methoden: (dort gibt es je nach Objekt oftmals Methoden ala .toVersionString())
$Result | select -Expand Version | gm * -Force

Wenn das Objekt Version darin nämlich die ToString() Methode nicht "Überschreibt " bringt das explizite kovertieren via [string] nichts dann musst du die entsprechende Eigenschaft explizit auswählen oder eine entsprechende Methode des Objekts bemühen das daraus ein String wird und dann mittels Methode oder Eigenschaft an das Feld "Version" anhängen.
$Result | Select "Produktname", @{l="Version"; e={$_.Version."Eigenschaft oder Methode"}} | Export-CSV -path $share -NoType -Encoding UTF8 -delimiter ";"  
Ohne dein Objekt zu kennen, eben nur Muußkugel face-sad.

Ohne diese Angabe werden einfach die Eigenschaften des Version-Feldes so wie sie per Default von der Powershell per Format-List ausgegeben werden in die CSV gepappt (gemuußt? face-smile).

Grüße Uwe
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 aktualisiert um 16:31:50 Uhr
Goto Top
Hallo Uwe,

ich bin derzeit und in naher Zukunft technisch eingeschränkt das kein C&P mehr geht von der einen Maschine auf die Maschine mit Internet. ;(
Screenshots ist das einzige. ;(

fl *:
fl_stern

die member schauen auch ok aus:
member

Ohne Export-CSV:
auszug

Export nach dem Schema:
csv

VG

PS:
Applicationstext und Versionstext sind Dummy Einträge, nicht irritieren lassen. =)
Mitglied: Kraemer
Kraemer 10.07.2018 aktualisiert um 16:33:19 Uhr
Goto Top
Sage mal, ist der letzte Screenshot ein Excel? Wenn ja, dann wäre das PEBCAK
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 um 16:33:53 Uhr
Goto Top
jupp, der letzte Screenshot ist das csv was vom export-csv erzeugt wird.
Mitglied: Kraemer
Kraemer 10.07.2018 aktualisiert um 16:35:05 Uhr
Goto Top
Heiland - CSV kennt keine Datentypen. Du musst Excel beim IMPORT schon Explizit sagen, wie es die Datei interpretieren muss.
Mitglied: colinardo
colinardo 10.07.2018 aktualisiert um 16:37:30 Uhr
Goto Top
Scheint als hätten beide Spalten eine zusätzliche Sub-Eigenschaft, weil die jeweils als Wert in der ersten Zeile der Spalten stehen:
Probier es mit
$Result | Select @{n='Produktname';e={$_.Produktname.ApplicationText}}, @{n="Version"; e={$_.Version.Versiontext}} | Export-CSV -path $share -NoType -Encoding UTF8 -delimiter ";"  
Aber die automatische Umwandlung in Excel ist normal da kannst du nur gegensteuern indem du statt Doppelklick auf die CSV den Import-Asistenten in Excel für delimited Text benutzt!!
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 um 16:35:58 Uhr
Goto Top
Ich mache ja kein Import. Sondern komme über das export-csv zur csv.
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 um 16:37:16 Uhr
Goto Top
Nein keine beiden Subeigenschaften, sondern "ApplicationsText" und "Versionstext" ist ein Dummy Eintrag in der DB, den einfach ignorieren. =)
Mitglied: Kraemer
Lösung Kraemer 10.07.2018 um 16:37:33 Uhr
Goto Top
Excel arbeitet mit Excel-Dateien! Alles andere wird importiert - egal wie du das sehen / nennen magst.
Hör auf mit dem Doppelgeklicke und benutze den Import-Assistenten face-smile
Mitglied: colinardo
Lösung colinardo 10.07.2018 aktualisiert um 16:55:11 Uhr
Goto Top
Zitat von @H41mSh1C0R:

Nein keine beiden Subeigenschaften, sondern "ApplicationsText" und "Versionstext" ist ein Dummy Eintrag in der DB, den einfach ignorieren. =)
OK. Dann s.o., die automatische Felddatentyp-Umwandlung in Excel ist normal da kannst du nur gegensteuern indem du statt Doppelklick auf die CSV den Import-Asistenten in Excel für delimited Text benutzt und dort für die Version Spalte Text als Typ angibst!!
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 um 17:01:21 Uhr
Goto Top
Danke für eure Geduld. =)

Also die Vorgehensweise:

CSV erzeugen -> Import -> XLSX erzeugen und passend formatieren?

Wenn das die einzige Möglichkeit ist werd ich das erstmal verwerfen müssen, da das Script als Job auf einem Server läuft und die haben hier kein Office. ^^
Mitglied: colinardo
colinardo 10.07.2018 aktualisiert um 17:14:20 Uhr
Goto Top
Zitat von @H41mSh1C0R:
CSV erzeugen -> Import -> XLSX erzeugen und passend formatieren?
Nö, das was tatsächlich in der CSV landet ist korrekt so wie es die Powershell dir auswirft, es wird nur beim Doppelklick von Excel falsch interpretiert, das ist ein Automatismus von Excel der versucht die Datentypen zu erkennen. Den Import in Excel brauchst du nur wenn du die Daten direkt in Excel bearbeitest.
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 aktualisiert um 17:34:30 Uhr
Goto Top
Das Problem wird eher sein das der geneigte Office Nutzer das nicht hinbekommt. Die möchten immer nur gern Doppelklick und die Welt muss sich ihnen auftuen. =)

Also entweder ich stelle ihm eine xlxs bereit oder er wird nie das csv anklicken, wenn das durch Excel falsch interpretiert wird.
Mitglied: colinardo
colinardo 10.07.2018 aktualisiert um 17:48:04 Uhr
Goto Top
Zitat von @H41mSh1C0R:
Also entweder ich stelle ihm eine xlxs bereit oder er wird nie das csv anklicken.
Hindert dich ja keiner dran. Oder stelle jedem Wert ein Hochkomma voran dann interpretiert Excel nichts darin face-smile, oder besser noch, fomuliere den Wert als Formel ==> '="12.6"' dann wird ebenfalls nichts interpretiert sondern der String als Formel genommen und als Text ausgegeben.
Mitglied: colinardo
Lösung colinardo 10.07.2018 aktualisiert um 18:17:54 Uhr
Goto Top
Hier für dein Beispiel dann wird die Spalte nicht mehr interpretiert sondern durch die Formel als Plaintext dargestellt wenn deine Jungs und Mädels drauf rum klicken ...
$Result | Select "Produktname", @{n='Version'; e={"=`"$($_.Version)`""}} | Export-CSV -path $share -NoType -Encoding UTF8 -delimiter ";"  

Als denn, sportlichen Feierabend (mit Fritten oder Froschschenkeln? face-wink)

Grüße Uwe
Mitglied: H41mSh1C0R
H41mSh1C0R 10.07.2018 um 19:07:42 Uhr
Goto Top
Danköööö. =)

Endlich im Feierabend mit dem Radl nach Hause und noch fix Futter jagen in der Küche.

Bin auf jeden Fall für die Fritten. *gg*

Muss noch ein paar Punkte sammeln im Tippspiel eines anderes Forums. Platz 34/1490

VG und ebenfalls einen sportlichen Abend