gpt4 book ai didi

具有功能的PowerShell错误处理

转载 作者:行者123 更新时间:2023-12-04 12:45:30 25 4
gpt4 key购买 nike

我想这是一个最佳实践问题。

设计将在脚本中使用的函数时,处理该函数中可能发生的错误的最佳方法是什么?

例如,假设我们有一个执行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,则将生成一个自定义的 [ErrorRecord]对象,将其引发:
#Requires -Version 5
If ($ErrorCondition)
{
$PSCmdlet.ThrowTerminatingError(
[System.Management.Automation.ErrorRecord]::new(
[System.Exception]::new('Error message'),
'FullyQualifiedName',
[System.Management.Automation.ErrorCategory]::DeviceError,
$ErrorCausingObject
)
)
}

使用这种方法,我可以在文档中包括根据出错原因抛出的错误,以便调用者可以根据抛出的错误利用多个catch并进行处理。

这里有一些不错的文章:
Everything about exceptions
Scripting Guy: Handling errors
On the OutputType attribute

关于具有功能的PowerShell错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47491413/

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