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
强制非终止错误停止执行,因此它们会被捕获