feuerstein08
Goto Top

Komma oder Punkt ? Powershell Problem!

Wieder mal ein "kleines?" Powershell Problem.

Hallo Zusammen,

ich möchte gern verschiedene Informationen per OUT-File in eine Datei schreiben. Gut, es soll eine CSV-Datei werden und es gibt das Export-CSV, aber so muss es doch auch gehen, oder?

cls
$logfile = "C:\Log\Logfile.csv"	  

# LastBootUpTime
get-wmiobject -class Win32_OperatingSystem -property LastBootUpTime | % {$LastBootUp = $_.LastBootUpTime}

# Startzeit von WinLogon
get-wmiobject win32_process | where { $_.ProcessName -eq 'Winlogon.exe'} | % {$Startzeit_WL = $_.CreationDate }  

# Zeit zwischen LastBootUpTime und WinLogon 
$LB_WL = (([WMI]'').ConvertToDateTime($Startzeit_WL) - ([WMI]'').ConvertToDateTime($LastBootUp)).TotalSeconds  

# Ausgabe
$LB_WL | out-file -filepath $logfile -encoding default -append 
"Test" + ";" + $LB_WL | out-file -filepath $logfile -encoding default -append   

Die Zeile "$LB_WL | out-file -filepath $logfile -encoding default -append" zeigt, dass der richtige Wert mit "," in die Datei geschrieben wird.
Nehme ich nun aber noch Text dazu (wie in der letzten Zeile, dann ändert sich der Trenner in einen Punkt ....

Inhalt der Ausgabedatei:
-35532,874304
Test;-35532.874304


Warum?
Und, wie kann ich das umgehen? (Ich möchte noch mehr Werte (Text und Zahlen) in die Zeile schreiben)

Vielen Dank für Tipps, Tricks und Hilfe!
Feuerstein08

Content-Key: 126072

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

Printed on: April 19, 2024 at 11:04 o'clock

Member: filippg
filippg Sep 29, 2009 at 20:15:03 (UTC)
Goto Top
Hallo,

faszinierend!
Ich würde davon ausgehen, dass das was mit der Locale & Typisierung zu tun hat. $LB_WL ist dynamsich als Zahl typisiert. Beim Schreiben in die Datei wird das in einen String umgewandelt. Wenn du "Test" + ";" + $LB_WL machst wird an der Stelle schon eine Umwandlung in den String vorgenommen. Und offenbar greift bei einem die Lokalisierung nicht. Das würde ich als "typisch Powershell" bezeichnen.
Eine Lösung fällt mir nicht ein. Nur ein "Dirty Workaround": Du kannst in dem String . durch , ersetzen lassen (auch das in PS nicht ganz einfach, siehe http://www.aaronlerch.com/blog/2007/03/28/powershell-replace-string-fun ... oder http://www.eggheadcafe.com/software/aspnet/30931291/replace.aspx).

Gruß

Filipp
Member: Feuerstein08
Feuerstein08 Sep 30, 2009 at 06:26:33 (UTC)
Goto Top
Hallo Filipp,

vielen Dank für die schnelle Antwort, aber dieser "Workaround" gefällt (und funktioniert) nicht wirklich.
(Der zweite Link ist tot ..)

Kann man Powershell nicht irgendwie mitteilen, das die werte so 1:1 in die Datei geschrieben werden sollen?

Ich wäre für weitere Tipps etc. dankbar.

Feuerstein08
Member: Feuerstein08
Feuerstein08 Oct 14, 2009 at 15:52:28 (UTC)
Goto Top
Hallo,

ich hatte das Glück Hr. Dr. Tobias Weltner (Powershell-Guru) kennenzulernen. Keine Minute später hatte ich die Lösung. Einen Platzhalter und die entsprechende Formatierung << {0} -f >>

Die letzte Zeile muss dann also so aussehen:
"Test;{0}" -f $LB_WL | out-file -filepath $logfile -encoding default -append   

Vielen Dank Hr. Weltner!

Gruß
Feuerstein08