gpt4 book ai didi

powershell - 当 $ErrorActionPreference 设置为停止时,您可以重定向 powershell 脚本中的错误吗?

转载 作者:行者123 更新时间:2023-12-03 09:32:54 24 4
gpt4 key购买 nike

我有一些 powershell 脚本,其中包含以下内容:

$ErrorActionPreference = "stop"
trap { Write-Error $_.Exception; }

使用 powershell 重定向运算符从 powershell 窗口调用脚本时:
c:\somescript.ps1 2> c:\error.txt

它只会将错误打印到 powershell 窗口,而不会将其重定向到文件。如果我从脚本中删除 $ErrorActionPreference = "stop",则重定向有效,但这不是一个可行的选择,因为如果脚本遇到任何错误,我们需要终止脚本。我也尝试过使用'*>',但这会产生相同的结果。

有什么方法可以将错误重定向到文件而无需更改所有脚本?

最佳答案

您的方法的问题是 $ErrorActionPreference = "Stop" :

  • 立即停止(中止)整个脚本和调用它的命令 , c:\somescript.ps1 2> c:\error.txt ,
  • 这意味着 重定向 2> c:\error.txt未执行 ,并且错误消息显示在控制台中,而不是在指定文件中捕获。

  • 解决方法 有点麻烦:
    将另一个脚本的调用包装在 try ... catch statement 中如下:帽子提示 FatalBulletHit寻求他的帮助。
    $ErrorActionPreference = 'Stop'

    try {

    c:\somescript.ps1

    } catch {

    # Now you can write the error record to the file.
    $_ > c:\error.txt

    # == Optional additional actions.

    # If desired, you can additionally
    # emit the error too (write it the error to the error stream).
    # !! -ErrorAction Continue is necessary in order to override
    # !! $ErrorActionPreference = 'Stop'.
    # !! Without it, the use of Write-Error itself would cause an - uncaught -
    # !! script-terminating (fatal) error.
    Write-Error -ErrorRecord $_ -ErrorAction Continue

    # Exit the script with a nonzero exit code to signal failure
    # (which is useful if your script is called from *outside*
    # PowerShell).
    exit 1

    }
    需要使用 -ErrorAction Continue (或临时设置 $ErrorActionPreference = 'Continue' )在调用 Write-Error 之前在 catch阻止导致脚本终止(致命)错误令人惊讶;如果您的脚本/函数是 advanced,它也适用一,你用 $PSCmdlet.WriteError($_)反而。

    关于powershell - 当 $ErrorActionPreference 设置为停止时,您可以重定向 powershell 脚本中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132910/

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