Question
Ne pas afficher les erreurs
- Grégory
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 49
- Remerciements reçus 0
il y a 17 ans 5 mois #2915
par Grégory
Ne pas afficher les erreurs a été créé par Grégory
Bonjour tout d'abord
Je me présente un petit peu
Donc Nostra (Grégory de mon prénom) 25 ans, admin réseaux dans une PME de 90 personnes à Pontarlier (25)
je débute avec Powershell et essaie de comprendre la logique/syntaxe en m'amusant un peu
un bon screenshot vaut mieux qu'un long discours donc c'est par là que ça se passe : img513.imageshack.us/my.php?image=psqm9.jpg
ça marche bien sauf qu'une des machines n'est pas allumée -> erreur
ma question : y a t'il moyen d'empêcher l'affichage de l'erreur ou de l'ignorer?
Je me présente un petit peu
Donc Nostra (Grégory de mon prénom) 25 ans, admin réseaux dans une PME de 90 personnes à Pontarlier (25)
je débute avec Powershell et essaie de comprendre la logique/syntaxe en m'amusant un peu
un bon screenshot vaut mieux qu'un long discours donc c'est par là que ça se passe : img513.imageshack.us/my.php?image=psqm9.jpg
ça marche bien sauf qu'une des machines n'est pas allumée -> erreur
ma question : y a t'il moyen d'empêcher l'affichage de l'erreur ou de l'ignorer?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 5 mois #2918
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Ne pas afficher les erreurs
Salut,
Nostra écrit:
- la gestion des exceptions (erreurs)
- l'affichage des erreurs (exceptions).
Connais-tu le principe des exceptions ?
Certaines erreurs sont bloquantes, arrêt brutale du script, d'autre pas. Sous PS on parle d'erreur critique et d'erreur non-critique.
La gestion des exceptions se fait via la clause trap, un trés bon tutoriel US sur le sujet : huddledmasses.org/trap-exception-in-powershell/
Un autre script trés utile : blogs.msdn.com/powershell/archive/2006/12/07/resolve-error.aspx
Je vais surement te noyer d'informations mais il y a de quoi faire avec pour aborder le sujet des exceptions.
la réponse à ta question et oui, voici quelques exemples de construction :
[code:1]
trap [System.IO.FileNotFoundException]
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
trap [System.IO.FileNotFoundException]
{Write-Host \"Gestion d'exception\" -fore green; Write-Warning $_; Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
trap
{Break}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)
Write-host \"la suite\"
}
trap
{Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)
Write-host \"la suite\"
}
trap
{Break}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
Write-host \"la suite\"
trap
{Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
Write-host \"la suite\"
[/code:1]
mais avec WMI la gestion des erreurs est un peu particulière :
[code:1]
#Gestion pour toutes les exceptions mais cela ne fonctionne pas...
trap
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{get-wmiobject win32_process -Computer PSinconnu}
#Gestion pour toutes les exceptions mais on demande au cmdlet de la gérer, et on place l'erreur dans la variable ErrorWMI
trap
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{get-wmiobject win32_process -Computer PSinconnu -ea 0 -ev ErrorWMI; $ErrorWMI}
#Gestion pour toutes les exceptions mais on demande au cmdlet de la gérer, et on ajoute l'erreur dans la variable ErrorWMI
$ErrorWMI=$Null
trap
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{get-wmiobject win32_process -Computer PSinconnu -ea 0 -ev +ErrorWMI;
get-wmiobject Win32_product -Computer PS2inconnu -ea 0 -ev +ErrorWMI; $ErrorWMI
}
#Gestion simplifiée
$ErrorWMI=$Null
get-wmiobject win32_process -Computer PSinconnu -ea 0 -ev +ErrorWMI;
get-wmiobject Win32_product -Computer PS2inconnu -ea 0 -ev +ErrorWMI;
$ErrorWMI
#from www.vistax64.com/powershell/180262-how-w...or-interception.html
trap [Management.Automation.ActionPreferenceStopException]
{ Write-Warning \"Gestion d'exception\"; Write-Host $ErrorWMI; continue }
get-wmiobject win32_process -Computer PSinconnu -ea 1 -ev ErrorWMI;
#ou
trap [Management.Automation.ActionPreferenceStopException]
{ Write-Warning \"Gestion d'exception\"; Write-Host $ErrorWMI[0].Message; continue }
get-wmiobject win32_process -Computer PSinconnu -ea 1 -ev ErrorWMI;
[/code:1]
Ensuite il faudrait une gestion plus élaborée pour associer, dans un seule objet, l'IP et l'erreur ce qui éviterais de faire du parsing de chaînes.
Voir aussi
Managing non-terminating errors : blogs.msdn.com/powershell/archive/2006/04/25/583241.aspx
Debugging PowerShell Scripts : blogs.msdn.com/powershell/search.aspx?q=...onad+Scripts&p=1
Nostra écrit:
Si je ne me trompe il y a deux questions:ma question : y a t'il moyen d'empêcher l'affichage de l'erreur ou de l'ignorer?
- la gestion des exceptions (erreurs)
- l'affichage des erreurs (exceptions).
Connais-tu le principe des exceptions ?
Certaines erreurs sont bloquantes, arrêt brutale du script, d'autre pas. Sous PS on parle d'erreur critique et d'erreur non-critique.
La gestion des exceptions se fait via la clause trap, un trés bon tutoriel US sur le sujet : huddledmasses.org/trap-exception-in-powershell/
Un autre script trés utile : blogs.msdn.com/powershell/archive/2006/12/07/resolve-error.aspx
Je vais surement te noyer d'informations mais il y a de quoi faire avec pour aborder le sujet des exceptions.
la réponse à ta question et oui, voici quelques exemples de construction :
[code:1]
trap [System.IO.FileNotFoundException]
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
trap [System.IO.FileNotFoundException]
{Write-Host \"Gestion d'exception\" -fore green; Write-Warning $_; Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
trap
{Break}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)
Write-host \"la suite\"
}
trap
{Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)
Write-host \"la suite\"
}
trap
{Break}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
Write-host \"la suite\"
trap
{Continue}
&{[Reflection.Assembly]::LoadFile(\"C:\Inconnu.dll\"«»)}
Write-host \"la suite\"
[/code:1]
mais avec WMI la gestion des erreurs est un peu particulière :
[code:1]
#Gestion pour toutes les exceptions mais cela ne fonctionne pas...
trap
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{get-wmiobject win32_process -Computer PSinconnu}
#Gestion pour toutes les exceptions mais on demande au cmdlet de la gérer, et on place l'erreur dans la variable ErrorWMI
trap
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{get-wmiobject win32_process -Computer PSinconnu -ea 0 -ev ErrorWMI; $ErrorWMI}
#Gestion pour toutes les exceptions mais on demande au cmdlet de la gérer, et on ajoute l'erreur dans la variable ErrorWMI
$ErrorWMI=$Null
trap
{Write-Warning \"Gestion d'exception\"; Write-Error $_.Message; Continue}
&{get-wmiobject win32_process -Computer PSinconnu -ea 0 -ev +ErrorWMI;
get-wmiobject Win32_product -Computer PS2inconnu -ea 0 -ev +ErrorWMI; $ErrorWMI
}
#Gestion simplifiée
$ErrorWMI=$Null
get-wmiobject win32_process -Computer PSinconnu -ea 0 -ev +ErrorWMI;
get-wmiobject Win32_product -Computer PS2inconnu -ea 0 -ev +ErrorWMI;
$ErrorWMI
#from www.vistax64.com/powershell/180262-how-w...or-interception.html
trap [Management.Automation.ActionPreferenceStopException]
{ Write-Warning \"Gestion d'exception\"; Write-Host $ErrorWMI; continue }
get-wmiobject win32_process -Computer PSinconnu -ea 1 -ev ErrorWMI;
#ou
trap [Management.Automation.ActionPreferenceStopException]
{ Write-Warning \"Gestion d'exception\"; Write-Host $ErrorWMI[0].Message; continue }
get-wmiobject win32_process -Computer PSinconnu -ea 1 -ev ErrorWMI;
[/code:1]
Ensuite il faudrait une gestion plus élaborée pour associer, dans un seule objet, l'IP et l'erreur ce qui éviterais de faire du parsing de chaînes.
Voir aussi
Managing non-terminating errors : blogs.msdn.com/powershell/archive/2006/04/25/583241.aspx
Debugging PowerShell Scripts : blogs.msdn.com/powershell/search.aspx?q=...onad+Scripts&p=1
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Grégory
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 49
- Remerciements reçus 0
il y a 17 ans 5 mois #2922
par Grégory
Réponse de Grégory sur le sujet Re:Ne pas afficher les erreurs
Oui tu m'as un peu submergé là 
mais j'ai trouver une soluce toute simple à mon problème
étant donné que l'erreur n'est pas blocante et vient simplement du fait que l'ordi n'est pas allumé
j'ai utilisé :
$ErrorActionPreference = \"SilentlyContinue\"
mais je vais tout de même me pencher sur la gestion d'erreur
merci encore
ps: je ne clos pas le topic au cas où j'aurais d'autres questions concernant les erreurs
mais j'ai trouver une soluce toute simple à mon problème
étant donné que l'erreur n'est pas blocante et vient simplement du fait que l'ordi n'est pas allumé
j'ai utilisé :
$ErrorActionPreference = \"SilentlyContinue\"
mais je vais tout de même me pencher sur la gestion d'erreur
merci encore
ps: je ne clos pas le topic au cas où j'aurais d'autres questions concernant les erreurs
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 17 ans 5 mois #2923
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Ne pas afficher les erreurs
Bonjour Nostra et soit le bienvenu sur PowerShell-Scripting.com 
Si tu veux te présenter plus en détail, nous avons ouvert un fil de discussion adaptée : Qui êtes vous Powersheller's
Ce que je ferais si j'étais à ta place c'est d'abord tester si la machine est allumée ou non avant de lui lancer une requête WMI.
Pour cela tu pourrais faire un simple Ping et récupérer en retour le code d'erreur avec la variable automatique $LASTEXITCODE ou simplement True ou False avec la variable $?.
Exemple :
[code:1]
Ping.exe machine1 -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
write-host 'Machine allumée !'
}
else
{
write-host 'Machine éteinte !'
}
[/code:1]
Le mieux serait d'en faire une fonction, comme ça tu l'apellerais avant chaque requête WMI.
Exemple :
[code:1]function Ping-Host
{
Ping.exe $args[0] -n 1 > $null
$LASTEXITCODE
if ($LASTEXITCODE -eq 0)
{
write-host 'Machine allumée !'
}
else
{
write-host 'Machine eteinte !'
}
}
[/code:1]
L'option -n 1 sert à n'envoyer qu'un seul ping, ce qui permet d'avoir une réponse rapide.
Arnaud
Si tu veux te présenter plus en détail, nous avons ouvert un fil de discussion adaptée : Qui êtes vous Powersheller's
Ce que je ferais si j'étais à ta place c'est d'abord tester si la machine est allumée ou non avant de lui lancer une requête WMI.
Pour cela tu pourrais faire un simple Ping et récupérer en retour le code d'erreur avec la variable automatique $LASTEXITCODE ou simplement True ou False avec la variable $?.
Exemple :
[code:1]
Ping.exe machine1 -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
write-host 'Machine allumée !'
}
else
{
write-host 'Machine éteinte !'
}
[/code:1]
Le mieux serait d'en faire une fonction, comme ça tu l'apellerais avant chaque requête WMI.
Exemple :
[code:1]function Ping-Host
{
Ping.exe $args[0] -n 1 > $null
$LASTEXITCODE
if ($LASTEXITCODE -eq 0)
{
write-host 'Machine allumée !'
}
else
{
write-host 'Machine eteinte !'
}
}
[/code:1]
L'option -n 1 sert à n'envoyer qu'un seul ping, ce qui permet d'avoir une réponse rapide.
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 17 ans 5 mois #2924
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Ne pas afficher les erreurs
Oui l'utilisation de $ErrorActionPreference à la valeur SilentlyContinue peut être une bonne option
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Grégory
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 49
- Remerciements reçus 0
il y a 17 ans 5 mois #2925
par Grégory
Réponse de Grégory sur le sujet Re:Ne pas afficher les erreurs
En partant sur ton idée de tester via un ping je suis arrivé à ça :
[code:1]param ($procname = \".\"«»)
get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
$_|out-file -append -filepath c:\ordi-allum.txt
}
}
get-content ordi-allum.txt|foreach{
get-wmiobject win32_process -computername $_
}|where{$_.processname -eq $procname}|select processname,csname[/code:1]
bon passer par un fichier c'est vraiment pas propre
d'autant plus que le -append pose problème vu que si on réexécute le script on réécrit à la suite du fichier
je pense qu'on peut mettre ça dans un tableau
reste plus qu'à voir comment fonctionnent les tableaux
<br><br>Message édité par: Nostra, à: 10/10/08 11:39
[code:1]param ($procname = \".\"«»)
get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
$_|out-file -append -filepath c:\ordi-allum.txt
}
}
get-content ordi-allum.txt|foreach{
get-wmiobject win32_process -computername $_
}|where{$_.processname -eq $procname}|select processname,csname[/code:1]
bon passer par un fichier c'est vraiment pas propre
d'autant plus que le -append pose problème vu que si on réexécute le script on réécrit à la suite du fichier
je pense qu'on peut mettre ça dans un tableau
reste plus qu'à voir comment fonctionnent les tableaux
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.056 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Ne pas afficher les erreurs