Powershell 我是否需要尝试/捕获和错误操作?

Powershell 我是否需要尝试/捕获和错误操作?,powershell,error-handling,try-catch,Powershell,Error Handling,Try Catch,以下代码尝试以三种不同的方式复制文件test,使用两种具有不同错误管理技术的功能: 对自己(它应该失败,因为它是不可能的) 复制到隐藏文件(由于默认情况下无法覆盖隐藏文件,因此应失败) 到不存在的文件夹(由于该文件夹不存在,因此应失败) 这两个函数中的一个使用try/catch管理错误,并能够检测前两个错误,另一个使用-ErrorAction并能够检测第三个错误 是否有一种技术可以捕捉所有错误 还是我总是需要使用这两种技术 function TestTryCatch($N, $Source, $

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

  • 对自己(它应该失败,因为它是不可能的)
  • 复制到隐藏文件(由于默认情况下无法覆盖隐藏文件,因此应失败)
  • 到不存在的文件夹(由于该文件夹不存在,因此应失败)
  • 这两个函数中的一个使用
    try/catch
    管理错误,并能够检测前两个错误,另一个使用
    -ErrorAction
    并能够检测第三个错误

    是否有一种技术可以捕捉所有错误

    还是我总是需要使用这两种技术

    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
    ,您的第一个版本应该可以捕获所有错误:

    函数TestTryCatch($N,$Source,$Dest){
    写入输出“$N TestTryCatch$Source$Dest”
    请尝试{复制项$Source$Dest-ErrorAction Stop}
    catch{Write Output“Error:$($Error[0].exception.message)”}
    }
    
    这里的关键是Powershell区分终止错误和非终止错误,非终止错误不会被
    try{}
    捕获。使用
    -ErrorAction Stop
    强制非终止错误停止执行,因此它们会被捕获