2

我正在尝试在 powershell 中使用 cleartool 命令。

如果命令失败,它应该捕获异常并执行操作。但它没有被 catch {} 捕获

try { 
       #If $viewname not exist it will throw error
       cleartool lsview $ViewName
    }
catch {

    # If list view fails , it means View doesn't exist. So create view
    Write-host "Create view"
    cleartool mkview -tag $ViewName -nsh $ccViews$ViewName".vws"

}

当 try 中的命令失败时,它不会调用 catch 中的表达式。

catch 命令是否不适用于非 .net 相关的东西?

4

2 回答 2

2

我从未见过用于 cleartool 的 powershell 脚本中的异常机制。
(我看到的这对夫妇在“如何使用 cleartool 为每个组件查找根 [文件夹]? ”,以及“如何使用管道描述推荐基线”)。

这个旧线程(2006,所以对于 Powershell 的第一个版本)说明了错误管理机制,使用$?

cleartool lsco -cview -s . |
foreach {
  cleartool diff -pred -opt -sta "$_"
  if ($?) {
    cleartool unco -rm "$_"
  } else {
    cleartool ci -nc "$_"
  }
}

要使用您的机制,您可能希望将 cleartool 调用封装在 Invoke-Command 中,并从包装函数返回状态码,如“使用“<code>invoke-command”捕获命令的返回码-Powershell 中所述2 "。

或者,您可以尝试调用CAL 命令,而不是直接调用 cleartool,就像在此脚本中一样

于 2012-02-16T08:53:45.253 回答
2

由于 cleartool 是一个外部 exe 文件,它不会在 PowerShell 环境中抛出异常。

根据IBM 文档:如果您在交互模式下通过输入退出命令退出 cleartool,则退出状态为 0。单命令模式的退出状态取决于命令是否成功(零退出状态)或生成错误消息(非零退出状态)。

在 PowerShell 中,您可以使用$LASTEXITCODEvar 获得此非零退出状态。因此,正如@VonC 解释的那样,您可以使用$?检查单命令是否有效,然后$LASTEXITCODE获取具体错误。

于 2012-02-16T10:09:52.727 回答