我正在尝试在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相关的东西?
答案 0 :(得分:2)
我从未在powershell脚本中看到过用于cleartool的异常机制 (我看到的那对夫妇在“how to find root[folder] for each component using cleartool?”和“How to describe recommend baseline with pipeline”中。
此old thread (2006, so for the first version of Powershell)说明了使用$?
:
cleartool lsco -cview -s . |
foreach {
cleartool diff -pred -opt -sta "$_"
if ($?) {
cleartool unco -rm "$_"
} else {
cleartool ci -nc "$_"
}
}
要使用您的机制,您可能希望在Invoke-Command中封装您的cleartool调用,并从包装函数返回状态代码,如“catching return code of a command with “invoke-command
” - Powershell 2”中所述。
或者,您可以尝试拨打CAL commands as in this script。
,而不是直接调用cleartool答案 1 :(得分:2)
由于cleartool是一个外部exe文件,因此它不会在PowerShell环境中抛出异常。
根据IBM documentation:如果通过在交互模式下输入quit命令退出cleartool,则退出状态为0.单命令模式的退出状态取决于命令是否成功(零退出状态)或生成错误消息(非零退出状态)。
在PowerShell中,您可以使用$LASTEXITCODE
var获得此非零退出状态。因此,正如@VonC解释的那样,您可以使用$?
检查单命令是否有效,然后使用$LASTEXITCODE
来获取特定错误。