当需要处理脚本块中的终止错误时,请在PowerShell中使用Try
,Catch
,最后使用块。
终止错误是那些使语句无法运行的错误。当PowerShell无法以某种方式处理终止错误时,它还将停止使用当前管道运行脚本或函数。在其他语言(例如C)中,这些错误称为异常。
1.Try{……..}块
Try
块是脚本的一部分,希望PowerShell监视错误。 当该块中发生错误时,首先将其存储在自动变量$Error
中。之后,PowerShell搜索Catch
块来处理它。
如果Try
块没有匹配的Catch
块,则PowerShell将在父作用域中搜索适当的Trap
或Catch
块。
Try块的语法
下面的框显示了try
块的语法:
try
{
Statement-1
Statement-2
Statement-N
}
Try
语句必须至少具有一个catch
或一个finally
块。 在上面的语法中,Try
关键字后括号内是单个或多个语句。
2.Catch {…..}块
Catch
块是脚本中处理Try
块生成的错误的部分。可以定义Catch
块要处理的错误类型。 错误类型是Microsoft .NET Framework的例外。一个Try
块可以具有多个catch
块,用于不同类型的错误。除了`Catch块,您还可以使用Trap块来处理错误。
Catch块的语法
下面是catch
块的语法:
catch [ [<error type>] [',' <error type>] *]
{
Statement-1
Statement-2
Statement-N
}
错误类型(<error type>
)显示在括号中。 最外面的括号表明该元素是可选的。 在以上语法中,catch
关键字后跟一个可选的错误类型说明列表和一个语句列表。 当发现任何捕获块时,将执行捕获块中的语句。
3.Finally {……}块
Finally
块是脚本的一部分,用于释放脚本不再需要的资源。
下面是finally
块的语法:
finally
{
Statement-1
Statement-2
Statement-N
}
在finally
块之后是单个或多个语句,这些语句包含在每次执行脚本时都会执行的大括号中。
示例
示例1:以下示例仅将一个Catch
块与Try
块一起使用:
Try
{
Get-ChildItem
}
catch
{
"Error in a Try block."
}
在此示例中,该命令在Try
块中是正确的,因此没有错误,并显示以下输出:
目录: C:\Users\hema
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/5/28 9:16 .anaconda
d----- 2018/9/12 16:14 .android
d----- 2019/9/4 18:14 .atom
d----- 2018/10/31 9:01 .cargo
d----- 2019/7/2 10:31 .conda
d----- 2018/11/6 9:50 .dotnet
d----- 2018/10/23 9:33 .eclipse
d----- 2018/10/11 14:18 .IdeaIC2018.2
d----- 2018/12/8 16:49 .IdeaIC2018.3
d----- 2019/7/2 16:16 .ipynb_checkpoints
d----- 2019/5/28 9:18 .ipython
d----- 2019/7/2 10:23 .jupyter
d----- 2019/5/29 11:23 .keras
d-r--- 2019/11/23 21:12 3D Objects
d----- 2018/10/5 8:25 Aptana Rubles
d-r--- 2019/11/23 21:12 Contacts
d-r--- 2020/2/5 19:07 Desktop
d-r--- 2020/2/5 19:05 Documents
d-r--- 2020/2/3 17:36 Downloads
d----- 2018/10/4 10:35 eclipse-workspace
d----- 2018/10/5 9:39 eclipsej22-workspace
d-r--- 2019/11/23 21:12 Favorites
d----- 2018/9/12 16:14 HBuilder
d----- 2018/9/12 16:44 HBuilder settings
d----- 2018/9/12 16:14 HBuilderProjects
-a---- 2020/1/17 22:15 3314 .bash_history
-a---- 2019/7/2 10:20 43 .condarc
-a---- 2018/11/14 14:03 1166 .firefly.conf
-a---- 2020/1/9 21:29 1918 .firefly2.conf
-a---- 2019/5/24 14:12 43 .gitconfig
-a---- 2019/5/30 21:14 1939 .viminfo
-a---- 2019/7/2 10:36 846 Untitled.ipynb
-a---- 2019/7/2 16:17 23222 Untitled1.ipynb
... ...
示例2:以下示例还仅将一个Catch
块与Try
块一起使用:
Try
{
Get-Child
}
catch
{
"Error in a Try block."
}
在此示例中,Try
块中的命令错误,因此Try
块中存在错误。 因此从catch
块获取输出:
Error in a Try block.