Wenn man mit
'irgendein Text' | Out-File $outfile -Encoding UTF8
Text in eine Textdatei ausgibt, entsteht am Ende eine „UTF mit BOM“-Kodierung. Unix- und Linux-Programme, denen man die Datei dann verfüttern möchte, finden das oft nicht gut.
Abhilfe schafft der folgende Befehl:
$cnt = Get-Content $outfile #outfile = Pfad der Datei [System.IO.File]::WriteAllLines($outfile, $cnt)
Natürlich darf der Hinweis nicht fehlen, dass die .NET-Methode um einiges schneller ist als Out-File. Der folgende Code zeigt es sehr eindrucksvoll:
'PowerShell-Methode:' (Measure-Command { for ($i=1;$i-lt 10000;$i++) { "Auf dieser Zeile der Textdatei steht die Zahl $i" | Out-File c:\temp\test_out_ps.txt -Encoding utf8 -Append } }).TotalSeconds '.NET-Methode:' (Measure-Command { for ($i=1;$i-lt 10000;$i++) { [System.IO.File]::AppendAllText('c:\temp\test_out_net.txt',"Auf dieser Zeile der Textdatei steht die Zahl $i`n",[System.Text.Encoding]::UTF8) } }).TotalSeconds
Auf meinem Rechner: PowerShell = 5,4 Sekunden, .NET = 1,6 Sekunden.
Antworten