2014-08-29 52 views
0

我有這樣添加內容與重定向到文件穿插,奇怪的格式

$logfile = "C:\test.log" 
Add-Content -Path $logFile -Value "Add-Content Message" 
$result= CallMyFunction -Verbose 4>> $logFile 

function CallMyFunction() 
{ 
    [OutputType([string[]])] 
    [CmdletBinding()] 
    param(
) 
    Write-Verbose "Verbose Message 1" 
    Write-Verbose "Verbose Message 2" 
    Write-Output "Return Value" 
} 

一個簡單的腳本,當您檢查test.log中你會得到如下:

附加此貼
V erbose消息1 V erbose消息2

爲什麼日誌的第二行格式化,每個字符之間有空格?有趣的是,如果我堅持使用重定向或添加內容來追加結果到日誌文件,它的格式是正確的。當兩者一起使用時,我錯過了什麼?

回答

1

嗯,它似乎與>>重定向操作符發生,無論你傳遞給它。我用

'test' >> $logfile 

測試並得到相同的行爲。我認爲這是因爲它重定向輸出流而不是將字符串提供給文件。

我嘗試了以下方法,它先將詳細輸出發送到默認標準輸出流,然後使用Add-Content寫入文件,並以更爲期望的方式對其進行格式化。

$result= CallMyFunction -Verbose 4>&1 | Add-Content -Path $logfile 
0

該問題是由用於寫入輸出文件的編碼差異引起的。 Add-Content使用ASCII作爲默認編碼,但重定向操作符使用Unicode(因爲這是Out-File的默認值)。

爲了解決這個,指定編碼Add-Content

Add-Content -Path $logFile -Value "Add-Content Message" -Encoding Unicode