【问题标题】:Add-Content interspersed with redirection to file, strange formatting添加内容散布着重定向到文件,奇怪的格式
【发布时间】:2014-08-29 13:44:49
【问题描述】:

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

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

为什么日志的第二行是这样格式化的,每个字符之间有一个空格?有趣的是,如果我坚持使用重定向或 Add-Content 将结果附加到日志文件,则它的格式会适当。当两者一起使用时,我缺少什么区别?

【问题讨论】:

    标签: powershell logging io


    【解决方案1】:

    嗯,无论您传递给它什么,它似乎都发生在 >> 重定向运算符上。我用

    测试过
    'test' >> $logfile
    

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-28
        • 2013-09-17
        • 1970-01-01
        • 2021-11-18
        • 2020-07-06
        相关资源
        最近更新 更多