gpt4 book ai didi

powershell - 我是否需要try/catch和-ErrorAction?

转载 作者:行者123 更新时间:2023-12-02 23:44:52 26 4
gpt4 key购买 nike

以下代码尝试使用两种具有不同错误管理技术的函数以三种不同方式复制文件test:

  • 本身(它应该失败,因为它不可能)
  • 到隐藏文件(它会失败,因为默认情况下无法覆盖隐藏文件)
  • 到不存在的文件夹(由于文件夹不存在而失败)

    这两个功能之一使用oj​​it_code管理错误,并且能够检测前两个错误,另一个使用try/catch,并且能够检测第三个错误。

    有一种技术可以捕获所有错误吗?

    还是我总是需要同时使用两种技术?
    function TestTryCatch($N, $Source, $Dest) {
    Write-Output "$N TestTryCatch $Source $Dest"
    try {Copy-Item $Source $Dest}
    catch {Write-Output "Error: $($error[0].exception.message)"}
    }

    function TestErrorAction($N, $Source, $Dest) {
    Write-Output "$N TestErrorAction $Source $Dest"
    Copy-Item $Source $Dest -ErrorAction SilentlyContinue
    if(!$?) {Write-Output "Error: $($error[0].exception.message)"}
    }

    New-Item 'test' -ItemType File | Out-Null
    (New-Item 'hidden' -ItemType File).Attributes = 'Hidden'

    TestTryCatch 1 'test' 'test'
    TestTryCatch 2 'test' 'hidden'
    TestTryCatch 3 'test' 'nonexistingfolder\test'

    TestErrorAction 1 'test' 'test'
    TestErrorAction 2 'test' 'hidden'
    TestErrorAction 3 'test' 'nonexistingfolder\test'

    Remove-Item 'test'
    Remove-Item 'hidden' -Force

  • 最佳答案

    如果使用-ErrorAction Stop,则第一个版本应该可以捕获所有错误,如下所示:

    function TestTryCatch($N, $Source, $Dest) {
    Write-Output "$N TestTryCatch $Source $Dest"
    try {Copy-Item $Source $Dest -ErrorAction Stop}
    catch {Write-Output "Error: $($error[0].exception.message)"}
    }

    此处的关键是Powershell区分终止错误和非终止错误,并且 try {}不会捕获非终止错误。使用 -ErrorAction Stop会强制非终止错误停止执行,因此会被捕获。

    关于powershell - 我是否需要try/catch和-ErrorAction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512726/

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