Question
[Résolu] Gestion d'erreur connexion à distance
- Mickael
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Amateur dans Powershell, je tente de réaliser un script me permettant de tester si la configuration powershell est OK sur l'ensemble de mes serveurs.
Je fais donc l’exécution d'un programme à distance via la commande Invoke-Command avec une liste de serveur
J'ai donc écrit ce script :
[code:1]foreach ($line in $ListingWindows){
try{
Invoke-Command -ComputerName $line -Scriptblock {\"Hello World\"}
}
catch {
echo \"erreur\"
$line >> $FileListingWrite
}
finally{
\"Test de $line [OK]\" >> $LogWrite
\"Test de $line [OK]\"
}
}[/code:1]
Lorsque je teste sur une division, J'ai bien ma personnalisation et l'exécution de mon catch, mais pas ici, et malgrès les informations que je trouve sur le net, impossible de trouver la solution à mon problème...
Est-ce que quelqu'un pourrait m'orienter et m'aider sur ce problème svp ?
Malgrès l'erreur flagrante, il ne passe jamais dans mon \"catch\"
Pourtant, j'avais tunner mon catch du genre :
[code:1]catch{
if ($_.Exception -is [System.Management.Automation.RuntimeException]){
echo \"erreur\"
$line >> $FileListingWrite
}[/code:1]
ou encore :
[code:1]catch{
if ($_.Exception -is [Microsoft.Online.Administration.Automation.MicrosoftOnlineException]){
if ($_.FullyQualifiedErrorId -match '^\s*CannotConnect,PSSessionStateBroken'){
$line >> $FileListingWrite
$Msg = \"erreur Connection impossible\"
}
Throw (new-object System.ApplicationException($Msg,$_.Exception))
}
}[/code:1]
L'erreur que je souhaite analyser et sauter en inscrivant le serveur dans un fichier pour refaire la configuration de mon outils WinRM :
[SERVER1] La connexion au serveur distant SERVER1 a échoué avec le message d'erreur suivant: Le client ne peut
pas se connecter à la destination spécifiée dans la demande. Vérifiez que le service est en cours d'exécution sur la
destination et qu'il accepte les demandes. Consultez les journaux et la documentation du service Gestion des services
Web en cours d'exécution sur la destination, le plus souvent IIS or WinRM. Si la destination est le service WinRM,
exécutez la commande suivante sur la destination pour analyser et configurer le service WinRM: «winrm quickconfig».
Pour plus d'informations, voir la rubrique d'aide about_Remote_Troubleshooting.
+ CategoryInfo : OpenError: (SERVER1:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : CannotConnect,PSSessionStateBroken
En vous remerciant par avance
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
regarde ta variable $ErrorActionPreference la doc ici
elle devrait etre a stop
sinon tu fais :
[code:1]$ErrorActionPreference = stop[/code:1]
tu peut aussi rajouté à la commande invoke l'option ErrorAction qui fait la même chose mais que pour cette commande
[code:1]Invoke-Command -ErrorAction Stop[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Mickael
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Je te remercie pour ton aide, en effet, maintenant c'est totalement fonctionnel
Je peux gérer même l'erreur via le -ErrorAction 'Stop'
Pour ceux qui sont intéressé par le script, voici la finalité terminé et validé :
[code:1]foreach ($line in $ListingWindows){
try{
Invoke-Command -ComputerName $line -ErrorAction 'Stop' -Scriptblock {\"Hello World\"}
}
catch {
if ($_.FullyQualifiedErrorId -match '^\s*CannotConnect,PSSessionStateBroken'){
\"CANNOT CONNECT $line\"
$line+\";CANNOT CONNECT\" >> $FileListingWrite
}
elseif ($_.FullyQualifiedErrorId -match '^\s*AccessDenied,PSSessionStateBroken'){
\"ACCES DENIED $line\"
$line+\";ACCES DENIED\" >> $FileListingWrite
}
elseif ($_.FullyQualifiedErrorId -match '^\s*NetworkPathNotFound,PSSessionStateBroken'){
\"ERROR NETWORK $line\"
$line+\";ERROR NETWORK\" >> $FileListingWrite
}
\"FIN TRAITEMENT $line\"
\"`n\"
}
finally{
\"Test de $line [OK]\" >> $LogWrite
\"Test de $line [OK]\"
}
}
[/code:1]
Message édité par: MiKaDo, à: 20/04/16 14:04<br><br>Message édité par: MiKaDo, à: 20/04/16 14:29
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
par contre le finally n'est pas bon il indique toutjours OK alors qu'il peut y avoir une erreur !
Le bloc « Finally » est optionnel mais est toujours exécuté même si il y a une erreur !
Connexion ou Créer un compte pour participer à la conversation.
- Mickael
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Pour mon cas, qu'il marque OK ou non n'a pas d'importance puisque c'est les log qui me permettront de traiter mes serveurs qui ont leurs WinRM défaillant
Merci pour le coup de main, grâce à toi, je peux avancer dans mon projet concrètement
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Gestion d'erreur connexion à distance