我有一个像这样的简单脚本
$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
为什么日志的第二行按照它的方式格式化,每个字符之间有一个空格?有趣的是,如果我坚持使用重定向或添加内容将结果附加到日志文件,它将被适当地格式化。当两者一起使用时,我错过了什么区别?
答案 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