添加内容穿插重定向到文件,奇怪的格式

时间:2014-08-29 13:44:50

标签: powershell logging io

我有一个像这样的简单脚本

$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 e r b o s e M e s e g e s 2 2

为什么日志的第二行按照它的方式格式化,每个字符之间有一个空格?有趣的是,如果我坚持使用重定向或添加内容将结果附加到日志文件,它将被适当地格式化。当两者一起使用时,我错过了什么区别?

2 个答案:

答案 0 :(得分:1)

嗯,好像发生在>>重定向运算符,无论您传递给它。我用

进行了测试
'test' >> $logfile

并得到了相同的行为。我认为这是因为它重定向输出流而不是将字符串提供给文件。

我尝试了以下方法,首先将详细输出发送到默认标准输出流,然后使用Add-Content写入文件,并以更加期望的方式对其进行格式化。

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

答案 1 :(得分:0)

问题是由用于写入输出文件的编码差异引起的。 Add-Content使用ASCII作为默认编码,但重定向运算符使用Unicode(因为这是Out-File的默认值)。

要解决此问题,请指定Add-Content的编码:

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