Pregunta

Estoy tratando de usar el comando ClearTool en PowerShell.

Si el comando falla, debe captar la excepción y hacer la acción. Pero no fue atrapado por la captura {}

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"

}

Cuando los comandos en el intento falla, no invoca expresiones en captura.

Si Catch Command no funcionará con cosas no relacionadas con .NET?

¿Fue útil?

Solución

Nunca vi el mecanismo de excepción utilizado en el guión de PowerShell para Cleartool.
(La pareja en la que vi estaba "¿Cómo encontrar la raíz [carpeta] para cada componente usando ClearTool?", y en "Cómo describir recomendar la línea de base con tubería").

Este Old Thread (2006, por lo que para la primera versión de PowerShell) ilustra ese mecanismo de gestión de errores utilizando $?:

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

Para utilizar su mecanismo, es posible que desee encapsular su llamada ClearTool en un comandante de invoke y devolver un código de estado de la función de envoltorio, como se describe en "capturar el código de retorno de un comando con "invoke-command" - PowerShell 2".

O, en lugar de llamar directamente a ClearTool, puede probar una llamada al CAL comandos como en este script.

Otros consejos

Como ClearTool es un archivo exe externo, no arroja una excepción en PowerShell Environnement.

De acuerdo a Documentación de IBM : Si sale de ClearTool ingresando un comando Quit en modo interactivo, el estado de salida es 0. El estado de salida del modo de mando único depende de si el comando tuvo éxito (estado de salida cero) o generó un mensaje de error (estado de salida sin cero).

En PowerShell puede obtener este estado de salida distinto de cero con $LASTEXITCODE var. Entonces, como explica @Vonc, puedes usar $? Para verificar si el mando único funciona, y luego $LASTEXITCODE Para obtener el error específico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top