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 :

erreur try catch [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 75
    Par défaut erreur try catch
    Bonjour à tous,

    Lors du redémarrage de services Windows (effectué par une fonction powershell) j'essai de capturer les messages d'erreurs s'il y en a.
    Voici ce que je fait :


    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try {
        foreach ($servicename in $list) {FuncCheckService -ServiceName $servicename}
        }
    catch {
    if ( $error[1].Exception -match "Microsoft.PowerShell.Commands.ServiceCommandException")
       {
        FuncMail -To "mail" -From "mail"  -Subject "$env:computername : Erreur" -Body "Le service ""$ServiceName"" n'a pas redémarré automatiquement" -smtpServer "serveur"
    }
    else {
        FuncMail -To "mail" -From "mail"  -Subject "$env:computername : ($ServiceName) service started." -Body "Le service ""$ServiceName"" a redémarré automatiquement" -smtpServer "serveur"
        }
    }

    Ma fonction appelée "FuncCheckService " fonctionne sans soucis hors du try / catch.
    J'ai eu beau lire plusieurs articles, je n'arrive pas à bien cerner mon problème ...

    merci d'avance de l'aide que vous pourrez m'apporter

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 75
    Par défaut
    J'ai trouvé !

    Le try catch ne correspond pas à ce que je voulais (en tout cas je n'arrivais pas lui faire faire ce que je voulais :p)

    Je suis revenu à la variable $Error que j'avais mise de côté, pour ce que ça intéresse voilà comment j'ai fait.
    Cela à pour but de "capturer" l'erreur au démarrage d'un service afin d'être alerté par mail :

    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
    19
    20
    21
    22
     
    #Déclaration de la liste des services à surveiller 
    $list = Get-Content "C:\Maintenance\Script\SvcList.txt"
     
    #Gestion des erreurs
    $Error.Clear() #vide la variable, important pour éviter les problèmes
    $ErrorActionpreference = 'SilentlyContinue' #permet de continuer le script en cas d'erreur ET rempli la variable $Error
     
     
    foreach ($servicename in $list) {FuncCheckService -ServiceName $servicename}
     
    if ($Error.Count -eq 1) #Si $Error est remplie alors j’envoi l'erreur
        {
    #Write-Host $error
        FuncMail -To "Mail" -From "Mail"  -Subject "$env:computername : Erreur" -Body "Une erreur s'est produite au redémarrage de service : $Error" -smtpServer "serveur"
     
        }
    else #ou alors j'envoi la confirmation de bon fonctionnement
        {
    #Write-Host ok
          FuncMail -To "Mail" -From "Mail"  -Subject "$env:computername : service started" -Body "Le service ""$ServiceName"" a redémarré automatiquement" -smtpServer "serveur"
        }

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par FloFlo12 Voir le message
    $Error.Clear() #vide la variable, important pour éviter les problèmes
    C'est ce que l'on peut croire, en théorie, la pratique est tout autre :
    http://connect.microsoft.com/PowerSh...-a-false-error
    http://connect.microsoft.com/PowerSh...-a-false-error
    http://connect.microsoft.com/PowerSh...Details/780053

    Je te déconseille cette approche, même si dans ton cas elle fonctionne, car en cas de modification de ta fonction tu peux tomber sur un des bugs cités.

    Pour info, dans un bloc try-catch l'exception courante est adressable via $_.Et la dernière erreurinsérée dans la collection $Error l'est à l'index 0.

    En utilisant la fonction Resolve-Error (dispo sur le net) tu peux vérifier les cas d'erreur renvoyés par un cmdlet/fonction.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 75
    Par défaut
    Bonjour et merci pour les infos.
    Du coup j'ai essayé d'utiliser Resolve-Error mais je n'arrive à voir comment l'intégrer dans un IF et l'envoyer par mail. Avec le $Error je pouvais faire un count ...
    Bon je pense qu'il ne me manque que d'un peu de recherche et de test

    Lorsque je l'aurais finalisé, je le remettrai ici

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Essaie ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Throw "ça marche pas."
     
     #Traite par défaut la dernière erreur
    $Message="$(Resolve-Error|Out-String)"
     
    $Message
    Tu peux aussi enregistrer la collection dans un fichier :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         $CpError=$Global:Error.Clone()
        $CpError|Export-clixml $FileName

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

Discussions similaires

  1. Gestion des erreurs avec le try catch
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 8
    Dernier message: 03/03/2010, 10h22
  2. Code erreur d'un Try, Catch (exception e)
    Par davelop dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 06/10/2008, 19h00
  3. Erreur, même dans un try-catch
    Par TheCool dans le forum C#
    Réponses: 3
    Dernier message: 06/03/2008, 19h26
  4. Réponses: 2
    Dernier message: 30/10/2007, 08h41
  5. Erreur de runtime sur un try ... catch
    Par Floréal dans le forum C++
    Réponses: 14
    Dernier message: 09/09/2005, 19h15

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