使用函数进行PowerShell错误处理
这是我想的最佳实践问题。使用函数进行PowerShell错误处理
在设计将在脚本中使用的函数时,处理函数中可能发生的错误的最佳方法是什么?
例如,假设我们有做X和Y基本功能:
Function Test-Function {
Try
{
<# Something in here that would generate an error #>
}
Catch
{
Throw
}
Return $someReturnResultIWantInMyScript
}
我的脚本调用此函数:
Try {
$ValueIWantFromFunction = Test-Function
}
Catch
{
<# Do something here #>
}
如果Test-Function
命中终止错误,它会抛出给来电者。围绕脚本中的函数调用的Try/Catch
将收到此错误并触发它自己的捕获。然后我可以决定做什么。
如果我没有在函数中抛出错误,脚本不会看到终止错误,然后我的$ValueIWantFromFunction
可能包含$Null
或其他没有用的东西。
这是一个错误处理与脚本内的函数和函数调用的好方法吗?有没有更好的办法?
回答:
作为一个最佳实践,我喜欢使用异常来处理函数/脚本中的错误并将它们记录下来,以便调用者知道哪里出了问题。例如:
Function Remove-File {
[CmdletBinding()]
[OutputType([Int])]
Param(
[Parameter(Mandatory)]
[String]$Path
)
Try
{
Remove-Item -Path $Path
Return 0
}
Catch
{
Return 1
}
}
如果我设计我自己的函数/ cmdlet时,我会生成自定义对象抛出:
#Requires -Version 5 If ($ErrorCondition)
{
$PSCmdlet.ThrowTerminatingError(
[System.Management.Automation.ErrorRecord]::new(
[System.Exception]::new('Error message'),
'FullyQualifiedName',
[System.Management.Automation.ErrorCategory]::DeviceError,
$ErrorCausingObject
)
)
}
使用这种方法,我可以包括在文档中根据错误发生哪些错误会被抛出,因此调用者可以根据抛出的错误利用多个捕获并处理它。
这里有一些不错的文章:
Everything about exceptions
Scripting Guy: Handling errors
On the OutputType attribute
以上是 使用函数进行PowerShell错误处理 的全部内容, 来源链接: utcz.com/qa/257174.html