当需要处理脚本块中的终止错误时,请在PowerShell中使用Try
,Catch
,最后使用块。
终止错误是那些使语句无法运行的错误。当PowerShell无法以某种方式处理终止错误时,它还将停止使用当前管道运行脚本或函数。在其他语言(例如C)中,这些错误称为异常。
Try
块是脚本的一部分,希望PowerShell监视错误。 当该块中发生错误时,首先将其存储在自动变量$Error
中。之后,PowerShell搜索Catch
块来处理它。
如果Try
块没有匹配的Catch
块,则PowerShell将在父作用域中搜索适当的Trap
或Catch
块。
Try块的语法
下面的框显示了try
块的语法:
try { Statement-1 Statement-2 Statement-N }
Try
语句必须至少具有一个catch
或一个finally
块。 在上面的语法中,Try
关键字后括号内是单个或多个语句。
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
关键字后跟一个可选的错误类型说明列表和一个语句列表。 当发现任何捕获块时,将执行捕获块中的语句。
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.