是否可以只为catch块创建一个函数



我有多个try catch块,并且它们都使用同一个catch块。

try {   
invoke-command -cn $host -Credential $cred -ScriptBlock {
param($name)    
statement...
} -ArgumentList $name

} catch {
$formatstring = "{0} : {1}`n{2}`n" +
"    + CategoryInfo          : {3}`n" +
"    + FullyQualifiedErrorId : {4}`n"
write-host ($formatstring)
exit 1
}
...
try {   
another statement...

} catch {
$formatstring = "{0} : {1}`n{2}`n" +
"    + CategoryInfo          : {3}`n" +
"    + FullyQualifiedErrorId : {4}`n"
write-host ($formatstring)
exit 1
}

我想问是否可以创建一个具有catch块的函数,这样我就可以调用和使用该函数,而不是多次写入相同的catch block

我正在使用poweshell 5

catch需要一个literal{ ... }块来跟随它,但从该块内部的可以自由调用可重用代码,例如函数,或者在最简单的情况下,调用脚本块:

# Define a script block to use in multiple `catch` blocks.
$sb = {
"[$_]" # echo the error message
}
# Two simple sample try / catch statements:
try {
1 / 0
}
catch {
. $sb # `. <script-block>` invokes the block directly in the current scope
}
try {
Get-Item -NoSuchParam
}
catch {
. $sb
}

注意:点源运算符.用于直接调用当前作用域中的脚本块,允许您直接修改该作用域的变量。这使得脚本块的行为就像直接用作catch黑色一样。

相反,如果要在子作用域中执行脚本块,请使用调用运算符&

您可以创建一个ScriptBlock,该块可以使用Invocation(call-&(运算符调用。

$callMe = {
$formatstring = "{0} : {1}`n{2}`n" +
"    + CategoryInfo          : {3}`n" +
"    + FullyQualifiedErrorId : {4}`n"
Write-Host -Object $formatstring
exit 1
}
try {   
Invoke-Command -ComputerName $host -Credential $cred -ScriptBlock {
param($name)    
# statement...
} -ArgumentList $name -ErrorAction "Stop"
} 
catch {
& $callMe
}

顺便说一句,如果你发现自己在重复代码,你可能可以做些什么。我建议将$ErrorActionPreference设置为停止,或者在Invoke-Command中添加一个-ErrorAction "Stop",以确保抛出终止错误。

  • 如果使用,最佳做法是将$ErrorActionPreference设置回"Continue"
  • 我还认为您希望使用-f(格式(运算符

相关内容

  • 没有找到相关文章

最新更新