非终止错误处理 - if $Error.count 和 $ErrorActionPreference = 'stop' 之间的区别
Non-terminating Error Handling - Difference between if $Error.count and $ErrorActionPreference = 'stop'
我需要处理 powershell 脚本中的非终止错误。最有效的方法是什么?
设置$ErrorActionPreference
变量停止并使用try/catch
$ErrorActionPreference = 'stop'
try{
functionThatCanFail
}catch{
#Do Stuff
}
或者清除 $Error
变量然后评估它是否被填充
$Error.Clear()
functionThatCanFail
if( $Error.Count -ne 0){
#Do Stuff
}
我会将 [CmdletBinding()]
添加到您的函数中并将其放入 try/catch.
由于 CmdletBinding,您现在可以使用参数 -ErrorAction Stop
.
调用您的函数
$ErrorAction
或 $Error.Clear()
的另一个建议也可以,但不是 'clean' 方式。
function functionThatCanFail
{
[CmdletBinding()]
param
(
$Param1
)
#Do stuff
}
try
{
functionThatCanFail -ErrorAction Stop
}
catch
{
#Error case
}
最简单的方法是使用 -ErrorVariable
/ -ev
公共参数,它记录了给定 cmdlet 报告的所有非终止错误指定变量。
但是请注意,此 仅适用于 cmdlets 和 高级功能 / 脚本,因为只有它们支持 common parameters - see 如何将您自己的函数定义为 高级 函数。
# Provoke a non-terminating error and silence it,
# but store it in custom variable $err via common parameter -ErrorVariable
Get-Item /NoSuchFile -ErrorAction SilentlyContinue -ErrorVariable err
if ($err) { # if a / a least one non-terminating error was reported, handle it.
"The following non-terminating error(s) occurred:`n$err"
}
这样,错误分析是命令范围的,无需记录或更改会话级$Error
集合的状态。
但是请注意,您不能以这种方式处理终止 错误。
有关 PowerShell 错误处理的全面概述,请参阅 here。
我需要处理 powershell 脚本中的非终止错误。最有效的方法是什么?
设置$ErrorActionPreference
变量停止并使用try/catch
$ErrorActionPreference = 'stop'
try{
functionThatCanFail
}catch{
#Do Stuff
}
或者清除 $Error
变量然后评估它是否被填充
$Error.Clear()
functionThatCanFail
if( $Error.Count -ne 0){
#Do Stuff
}
我会将 [CmdletBinding()]
添加到您的函数中并将其放入 try/catch.
由于 CmdletBinding,您现在可以使用参数 -ErrorAction Stop
.
调用您的函数
$ErrorAction
或 $Error.Clear()
的另一个建议也可以,但不是 'clean' 方式。
function functionThatCanFail
{
[CmdletBinding()]
param
(
$Param1
)
#Do stuff
}
try
{
functionThatCanFail -ErrorAction Stop
}
catch
{
#Error case
}
最简单的方法是使用 -ErrorVariable
/ -ev
公共参数,它记录了给定 cmdlet 报告的所有非终止错误指定变量。
但是请注意,此 仅适用于 cmdlets 和 高级功能 / 脚本,因为只有它们支持 common parameters - see
# Provoke a non-terminating error and silence it,
# but store it in custom variable $err via common parameter -ErrorVariable
Get-Item /NoSuchFile -ErrorAction SilentlyContinue -ErrorVariable err
if ($err) { # if a / a least one non-terminating error was reported, handle it.
"The following non-terminating error(s) occurred:`n$err"
}
这样,错误分析是命令范围的,无需记录或更改会话级$Error
集合的状态。
但是请注意,您不能以这种方式处理终止 错误。 有关 PowerShell 错误处理的全面概述,请参阅 here。