首页 > 解决方案 > 如何读取抛出的错误内容并在 IF 语句中使用它

问题描述

我想用try{}/Catch{} “抓取”异常的内容,并使用 IF 搜索其中的内容。有人可以告诉我如何使用$PSItem.Exception吗?谢谢 !

try {
  get-process ...
}
catch {
    if (PSItem.Exception ....) { 
        Write-Error -Message "just move on !" -ErrorAction continue
    }
    else {
        throw PSItem.Exception
    }
}

标签: powershell

解决方案


中的任何异常都是如此)是一种ErrorRecord类型(您可以在 msdn 上查看其成员)。在此记录中,实际异常在$PSItem.Exception(或$_代替$PSItem)下;Message此成员在成员 on下还有一串异常消息Exception。如果您使用该ErrorRecord#ToString方法,您可以直接获得此信息,而无需通过成员进行挖掘:

"$PSItem"

然后,您可以检查任何您喜欢的错误消息:

if ("$PSItem" -like '*Access denied*') {

作为旁注,不要重新抛出异常,只需像这样抛出原始错误记录:

else {
    throw
}

推荐阅读