使用 Write-Error 的 -Exception 参数时,连续错误记录之间缺少换行符

问题描述 投票:0回答:1

为什么 Windows PowerShell 5.1 和 ISE 在

Write-Error
生成的连续错误记录之间显示换行符,但如果使用 -Exception 参数,则
显示换行符? 到目前为止,我还没有在网上找到任何提到输出差异的内容。




输出比较:


错误测试(无异常).ps1
1..2 | ForEach-Object {Write-Error -Message "Error number $_"}

错误测试(有异常).ps1
1..2 | ForEach-Object {Write-Error -Message "Error number $_" -Exception ([System.Exception]::new("Generic Exception"))}
  • 很难看到,但绿色箭头指向具有
    [System.ConsoleColor]::Black
    背景的换行符: Write-Error output comparison


  • Pwsh 注释:
    • Pwsh 更改了错误消息的输出方式(例如
      $ErrorView
      ),并且通过设计删除了换行符(请参阅 github 问题 #24108
    • 无论是否使用
    • -Exception
       参数,
      pwsh 都会删除换行符,即使
      $ErrorView = 'NormalView'
      也是如此。



这是 Windows PowerShell 5.1 中的错误吗?

powershell write-error
1个回答
0
投票

虽然差异令人惊讶(并且不再影响 PowerShell (Core) 7),但重要的是要注意,for-display 格式的具体细节不是 PowerShell writing-的一部分更改合同

也就是说,

你永远不应该依赖于解析这样的仅用于显示表示,而是使用面向对象技术来检查已发生的错误,例如通过检查自动$Error

变量
或a的内容指定通过 common -ErrorVariable
 参数
接收 cmdlet 特定错误的变量,这两个参数都存储
[System.Management.Automation.ErrorRecord]
 实例。

© www.soinside.com 2019 - 2024. All rights reserved.