为什么 Windows PowerShell 5.1 和 ISE 在
Write-Error
生成的连续错误记录之间显示换行符,但如果使用 -Exception
参数,则不显示换行符? 到目前为止,我还没有在网上找到任何提到输出差异的内容。
1..2 | ForEach-Object {Write-Error -Message "Error number $_"}
1..2 | ForEach-Object {Write-Error -Message "Error number $_" -Exception ([System.Exception]::new("Generic Exception"))}
$ErrorView
),并且通过设计删除了换行符(请参阅 github 问题 #24108)-Exception
参数,pwsh 都会删除换行符,即使
$ErrorView = 'NormalView'
也是如此。虽然差异令人惊讶(并且不再影响 PowerShell (Core) 7),但重要的是要注意,for-display 格式的具体细节不是 PowerShell writing-的一部分更改合同。
也就是说,你永远不应该依赖于解析这样的仅用于显示表示,而是使用面向对象技术来检查已发生的错误,例如通过检查自动$Error
变量或a的内容指定通过 common
-ErrorVariable
参数接收 cmdlet 特定错误的变量,这两个参数都存储
[System.Management.Automation.ErrorRecord]
实例。