none
un catch sur une exception powershell RRS feed

  • Question

  • Bonjour,

    J'essaie de faire un catch sur une exception qui est levé par un accès refusé lors d'une tentative de déplacement d'un répertoire.

    J'ai essayé plusieurs manières, aucune ne marche. J'aimerais que le catch inscrive l'erreur dans un fichier log et continue l'exécution du script.

    Voici le code que j'ai :

    try
     {
     Move-Item -LiteralPath $RepSource -Destination $RepDestination
     Add-Content $outfile "$RepSource à été déplacer dans $RepDestination"
     } 
    
    Catch 
     {
     Add-Content $outfile "L'erreur suivante est survenue : $Error[0]"
     }
    

    Est-ce que quelqu'un a une suggestion pour régler mon problème.



    mardi 28 juin 2011 21:17

Réponses

  • Bonjour,

    si ton bloc Catch ne fonctionne pas, c'est qu'il doit s'agir d'une erreur non-bloquante qui, à la différence d'une erreur bloquante, ne déclenche pas d'exception.

    Utilise -ErrorAction Stop sur le cmdlet qui pose problème :

     try {
     ...
      Mycmdlet -EA Stop 
     ...
     } catch {
       fait qq chose
     }
    


    L'usage de -ErrorAction Stop déclenche l'exception suivante

     catch [System.Management.Automation.ActionPreferenceStopException]
     {
       fait qq chose pour -EA Stop 
     }
     } catch {
       fait qq chose sinon
     }

    Bien que la collection d'erreurs, variable $Error, soit renseignée avec la nouvelle erreur, celle-ci n'est pas du type exception :

     #Une erreur nonbloquante est du type ErrorRecord (PowerShell)
     $error[0].ErrorRecord.Exception
       #Une erreur bloquante est d'un type dérivé de la classe Exception (dotnet)
     $error[0].Exception
     

    Beatus, qui prodest, quibus potest.
    jeudi 30 juin 2011 18:46
    Modérateur