IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Problème avec try catch [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2014
    Messages : 99
    Par défaut Problème avec try catch
    Bonjour,

    Je me suis penché sur l'utilisation des blocs try...catch pour gérer mes erreurs d'exécution et créer du log un peu parlant mais il y a quelque chose qui doit m'échapper dans son fonctionnement.

    Pour mes tests, j'ai volontairement crée 2 erreurs lors de la copie d'un fichier d'un répertoire à un autre : une erreur de droit d'accès au répertoire de destination et une erreur de fichier à copié non existant.

    A l'exécution de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $source = "E:\Scripts\old\test.txt"
    $dest = "C:\test\test.txt"
    Copy-Item $source $dest
    J'ai donc soit cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Copy-Item : Impossible de trouver le chemin d'accès «*E:\Scripts\old\test.txt*», car il n'existe pas.
    Au caractère E:\Scripts\dev\Sans titre1.ps1:22 : 1
    + Copy-Item $source $dest
    + ~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (E:\Scripts\old\test.txt:String) [Copy-Item], ItemNotFoundException
        + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
    Soit celle-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Copy-Item : L'accès au chemin d'accès 'C:\test\test.txt' est refusé.
    Au caractère E:\Scripts\dev\Sans titre1.ps1:22 : 1
    + Copy-Item $source $dest
    + ~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (E:\Scripts\old\test2.txt:FileInfo) [Copy-Item], UnauthorizedAccessException
        + FullyQualifiedErrorId : CopyFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand
    Voilà donc ce que j'essaye pour attraper et personnaliser le retour de ces erreurs mais qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $source = "E:\Scripts\old\test.txt"
    $dest = "C:\test\test.txt"
    try{
        Copy-Item $source $dest -ErrorAction Stop
    }catch [CopyFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand]{
        Write-Host "pas les droits"
    }catch [PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand]{
        Write-Host "existe pas"
    }
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $source = "E:\Scripts\old\test.txt"
    $dest = "C:\test\test.txt"
    try{
        Copy-Item $source $dest -ErrorAction Stop
    }catch [Microsoft.PowerShell.Commands.CopyItemCommand.CopyFileInfoItemUnauthorizedAccessError]{
        Write-Host "pas les droits"
    }catch [Microsoft.PowerShell.Commands.CopyItemCommand.PathNotFound]{
        Write-Host "existe pas"
    }
    Quelqu'un pourrait-il m'expliquer pourquoi cela n'est pas bon svp, car là je sèche...
    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Bonjour,

    Par défaut $ErrorActionPreference vaut Continue, ce qui veux dire qu'en cas d'erreur il ne lèvera pas d'exception attrapable par le bloc try/catch et continuera le script.
    Tu peux soit modifier cette valeur par défaut soit le spécifier dans la plupart des cmdlet avec le paramètre ErrorAction

    Pour connaitre le type exact de ta dernière exception tu peux utiliser $Error[0].Exception.GetType().FullName


    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    try
    {
        $source = "C:\Users\Rico\Desktop\test.ps1"
        $dest = "C:\test.txt"
        Copy-Item $source $dest -ErrorAction Stop
    }
    catch [System.Management.Automation.ItemNotFoundException]
    {
        Write-Host "ItemNotFoundException"
    }
    catch [System.UnauthorizedAccessException]
    {
        Write-Host "UnauthorizedAccessException"
    }
     
     
    # Trouver le type de la dernière exception
    # $Error[0].Exception.GetType().FullName

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2014
    Messages : 99
    Par défaut
    Merci !

    J'utilisais bien le parametre ErrorAction à Stop mais je n'avais pas les bons noms d'erreur pour attraper les exceptions.

    Grace à $Error[0].Exception.GetType().FullName, j'ai pu trouver

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/07/2019, 23h01
  2. verifier une date avec TRY CATCH
    Par DJERDJAR YACINE dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/07/2007, 15h08
  3. Besoin d'aide avec try catch
    Par LeBigornot dans le forum C++
    Réponses: 12
    Dernier message: 01/06/2007, 23h52
  4. problème avec try
    Par michel71 dans le forum Delphi
    Réponses: 2
    Dernier message: 06/05/2007, 12h58
  5. Problème avec Try ... Except
    Par Kcintim dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2006, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo