gpt4 book ai didi

powershell - 如何使用写错误生成与回显相同的输出?

转载 作者:行者123 更新时间:2023-12-02 23:59:54 24 4
gpt4 key购买 nike

我读过 echo 的差异(这是一个 Write-Output )和 Write-Error但我仍然有异常和堆栈跟踪的问题。

以下示例演示了我的问题:

$ErrorActionPreference = "stop"
trap {
echo "Trap encountered. Exiting with 1. See errors below."
echo $_ # This is a test
Write-Error -ErrorRecord $_

exit 1
}

BROKEN_COMMAND

我不会发布输出,因为它是本地化的,但要点是:
  • echo输出“BROKEN_COMMAND”未发现是 CmdLet 等,并输出 的调用堆栈准确 发现问题的位置,上面将是第 10 行左右。
  • Write-Error输出“BROKEN_COMMAND”行也不是 CmdLet,但是调用堆栈实际上显示了 所在的行写入错误 语句是而不是正确的调用堆栈(第 5 行)

  • 如何正确写入错误 channel ?我试过省略 -ErrorRecord但没有效果。

    我需要错误 channel 来处理错误,因此将所有内容转储到 echo 中,然后在错误 channel 中写入“出现错误”不是一个好的选择。

    更新:我用 throw 测试了@MathiasR.Jessen 提示(实际上是 throw $_ )。
    然而,这会导致程序立即退出,而 $LASTEXITCODE 中没有有用的退出代码。 ,我需要正确地发出结束信号。我的 exit 1不执行,并且 throw 在没有正确退出代码的情况下终止。

    最佳答案

    Writing to error stream in Powershell using Write-Error

    write-error cmdlet 将显示您的消息,后跟 write-error cmdlet 本身的行号。

    在链接的问题中,据说这种行为在某个时候发生了变化。

    在任何一种情况下.. 试试这个
    隐藏在 Get-Help About_Preference_Variables提到了$ErrorView多变的

    普通 View (默认)

    Trap encountered. Exiting with 1. See errors below.
    BROKEN_COMMAND : The term 'BROKEN_COMMAND' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a
    path was included, verify that the path is correct and try again.
    At C:\errors.ps1:11 char:1
    + BROKEN_COMMAND
    + ~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (BROKEN_COMMAND:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    C:\errors.ps1 : The term 'BROKEN_COMMAND' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the
    name, or if a path was included, verify that the path is correct and try again.
    At C:\errors.ps1:6 char:6
    + Write-Error -ErrorRecord $_
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (BROKEN_COMMAND:String) [Write-Error], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException,errors.ps1

    但是如果你设置 $ErrorView = "CategoryView"你得到
    Trap encountered. Exiting with 1. See errors below.
    ObjectNotFound: (BROKEN_COMMAND:String) [], CommandNotFoundException
    ObjectNotFound: (BROKEN_COMMAND:String) [Write-Error], CommandNotFoundException

    也许这更有用

    你可能想改变你的
    回声$_

    回声 $_.tostring()

    另见 https://blogs.msdn.microsoft.com/powershell/2006/06/21/errorviewcategoryview/

    很遗憾,您不能编写自己的错误表单,例如 log4

    关于powershell - 如何使用写错误生成与回显相同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32311005/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com