Dans mon précédent blog, je vous est montré comment on pouvait mettre en place la gestion d’erreur sur des commandes sous powershell qui ne sont pas des CMDLET, cette fois-ci nous allons voir comment appliquer la gestion d’erreur sur une CMDLET
PERIMETRE: Dans le cadre de l’amélioration des script powershell concernant la vérification des services après le redémarrage des serveurs en production chez un de nos client, celui-ci à laisser le soin au service architecture de trouver une solution.
Mon script d’origine:
######SERVEURS A REDEMARRER################
$Computerstring = "orches1"     
$Computerdestination = $Computerstring.Split(",")
######SERVICES A ARRETER ET REDEMARRER################
$Servicesstring = "wudfsvc"     
$Servicesname = $Servicesstring.Split(",")
######LOG CREER POUR LA VERIFICATION AVANT L’ARRET DES SERVICES SUR CHAQUES SERVEURS + GESTION ERREUR SUR SYNTAXE Command###    
$StatusService = foreach ($vm in $Computerdestination){    
         get-Service -ComputerName $vm -name $Servicesname | select status,name,machinename }    
        
#GESTION ERREUR DES SERVICES
$ExitCodeService =  foreach ($SRVservices in $StatusService) {    
if ($($SRVservices.status) -eq "Running"){    
"Success : Service(s) Running" + $SRVservices    
}else{    
"Error : Service(s)" + $SRVservices    
}    
}
$ErrorStatusSVC = if ($StatusService -eq $null){    
"Error : Service(s) "      
}else{    
"Success : Service(s)"     
}   
Voici le résultat pour les sortie erreurs:
$ExitCodeService
$ErrorStatusSVC
Vous voyez au dessus $ExitCodeService prend en compte que le service wudfsvc étant arrêté comme SUCCESS condition voulu ceci est normal et que $ErrorStatusSVC à été mise en place pour anticipé les erreurs $ExitCodeService si aucune valeur ne ressort ($ExitCodeService = VIDE) cela peut être une erreur de syntaxe, de service ou de serveurs inaccessible ou inexistant
Par contre aucune erreur détailler il faut effectuer une recherche supplémentaire.
Mon script amélioré:
######SERVEURS A REDEMARRER################
$Computerstring = "orches1"     
$Computerdestination = $Computerstring.Split(",")
######SERVICES A ARRETER ET REDEMARRER################
$Servicesstring = "wudfsvc"     
$Servicesname = $Servicesstring.Split(",")
######LOG CREER POUR LA VERIFICATION AVANT L’ARRET DES SERVICES SUR CHAQUES SERVEURS + GESTION ERREUR SUR SYNTAXE Command###
$StatusService =     
Try {    
foreach ($vm in $Computerdestination){    
         get-Service -ComputerName $vm -name $Servicesname -ErrorAction stop | select status,name,machinename     
        }     
}catch{    
    "$vm => " + $Error[0]    
   }
#GESTION ERREUR DES SERVICES
$ExitCodeService =                                                                                          foreach ($SRVservices in $StatusService) {    
            if ($($SRVservices.status) -eq "stopped"){    
                    "Success:" + $SRVservices    
            }else{    
                    "Error:" + $SRVservices      
            }  
    }     
Voici le résultat pour la sortie d’erreur:
La correction se base sur la gestion d’erreur avec les commandes Try et Catch
Dans la partie Try entre crochets, la commande get-service doit obligatoirement avoir l’option qui permet la sortie d’erreur qui se nomme –ErrorAction stop cela permettra d’avoir dans la partie catch les messages d’erreur le déroulement du processus $Error[0] .
Message des erreurs qui sont géré dans : $StatusService
Erreur sur le compte d’ordinateur inexistant ou inaccessible:
Erreur sur le service inexistant ou inaccessible:
Erreur sur la syntaxe commande get-service:
Les messages de sortie sont aussi retransmis dans la variable $ExitCodeService à l’aide des conditions if et else







0 commentaires