Question
try/catch
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8899
par jojo
Hello les PowerShelleurs 
alors, je me demandais s'il y'avait une astuce pour trouver une exception spécifique...par exemple,je veux lever une exception si un fichier est inexistant..comment alors savoir la classe d'exception à adapter parmi la myriade de [class.exception] ...
une autre question, j'ai pu bricoler ceci:
[code:1]try {
$chemin = \"chemin_inexistant\"
[io.directory]::«»SetCurrentDirectory($chemin)
}
catch [IO.DirectoryNotFoundException] {
Write-Warning \"[exception] System.IO.DirectoryNotFoundException\"
}
catch {
Write-Warning \"[exception] non spécifié\"
}
finally {
\"Fin du traitement de try/catch\"
}
[/code:1]
mais je ne sais pas pourquoi dans le bloc try les cmdlets set-location/Push-Location/Pop-Location ne fonctionnent pas, seul la classe statique [io.directory] fonctionne
Merci
<br><br>Message édité par: jojo, à: 15/02/11 18:27
alors, je me demandais s'il y'avait une astuce pour trouver une exception spécifique...par exemple,je veux lever une exception si un fichier est inexistant..comment alors savoir la classe d'exception à adapter parmi la myriade de [class.exception] ...
une autre question, j'ai pu bricoler ceci:
[code:1]try {
$chemin = \"chemin_inexistant\"
[io.directory]::«»SetCurrentDirectory($chemin)
}
catch [IO.DirectoryNotFoundException] {
Write-Warning \"[exception] System.IO.DirectoryNotFoundException\"
}
catch {
Write-Warning \"[exception] non spécifié\"
}
finally {
\"Fin du traitement de try/catch\"
}
[/code:1]
mais je ne sais pas pourquoi dans le bloc try les cmdlets set-location/Push-Location/Pop-Location ne fonctionnent pas, seul la classe statique [io.directory] fonctionne
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Olivier
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 182
- Remerciements reçus 0
il y a 15 ans 3 mois #8900
par Olivier
Réponse de Olivier sur le sujet Re:try/catch
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 15 ans 3 mois #8903
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:try/catch
Ces Cmdlets ne renvoient pas d'exception qui peut être trappée ...
Mais on peut faire comme ça :
[code:1]
try{
Set-Location C:\toto -ErrorAction SilentlyContinue
if(!$?){
throw $error[0].Exception
}
}
catch{
Write-Host \"Erreur : \" $error[0].Exception.Message
}[/code:1]
Le -ErrorAction SilentlyContinue indique de passer l'erreur et de ne rien afficher dans la console.
La variable $? vaut $false si la commande précédente est tombée en erreur et $true si OK.
La commande throw permet de \"jeter\" l'exception, qui elle sera finalement trappée.
Au final, le répertoire \"toto\" n'existant pas, le message suivant s'affiche :
[code:1]
Erreur : Impossible de trouver le chemin d'accès « C:\toto », car il n'existe pas.[/code:1]
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 15/02/11 20:36
Mais on peut faire comme ça :
[code:1]
try{
Set-Location C:\toto -ErrorAction SilentlyContinue
if(!$?){
throw $error[0].Exception
}
}
catch{
Write-Host \"Erreur : \" $error[0].Exception.Message
}[/code:1]
Le -ErrorAction SilentlyContinue indique de passer l'erreur et de ne rien afficher dans la console.
La variable $? vaut $false si la commande précédente est tombée en erreur et $true si OK.
La commande throw permet de \"jeter\" l'exception, qui elle sera finalement trappée.
Au final, le répertoire \"toto\" n'existant pas, le message suivant s'affiche :
[code:1]
Erreur : Impossible de trouver le chemin d'accès « C:\toto », car il n'existe pas.[/code:1]
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 15/02/11 20:36
Connexion ou Créer un compte pour participer à la conversation.
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 3 mois #8906
par jojo
Réponse de jojo sur le sujet Re:try/catch
Hello Olivier et Matthew 
@Olivier: merci pour le lien, c'est une bonne source
, mais malheureusement ça ne traite pas mon cas 
@Matthew: merci pour l'exemple commenté
, mais le problème reste le même à savoir la spécialisation de l'exception, dans ton exemple ça lève une exception général, alors que moi je veux une exception spécialisé...une chose du genre:
[code:1]try{
Set-Location C:\toto -ErrorAction SilentlyContinue
# avec la classe statique [io.directory] \"OK\" mais ça ne veux pas fonctionner avec le cmdlet set-location !
}
catch [IO.DirectoryNotFoundException] {
Write-Host \"Répertoire introuvable\"
}
catch{
Write-Host \"autre erreur\"
}
[/code:1]
Merci
<br><br>Message édité par: jojo, à: 16/02/11 06:45
@Olivier: merci pour le lien, c'est une bonne source
@Matthew: merci pour l'exemple commenté
[code:1]try{
Set-Location C:\toto -ErrorAction SilentlyContinue
# avec la classe statique [io.directory] \"OK\" mais ça ne veux pas fonctionner avec le cmdlet set-location !
}
catch [IO.DirectoryNotFoundException] {
Write-Host \"Répertoire introuvable\"
}
catch{
Write-Host \"autre erreur\"
}
[/code:1]
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 15 ans 3 mois #8911
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:try/catch
Il faut utiliser Error et non pas SilentlyContinue. Erreur de ma part 
En fait, tu ne peux pas... En tout cas c'est ce que je comprends.
Si c'était le cas, le code suivant fonctionnerait :
[code:1] try{
Set-Location C:\toto -ErrorAction Error
}
catch [System.Management.Automation.ItemNotFoundException] {
Write-Host \"Répertoire introuvable !\"
}
catch [System.Management.Automation.DriveNotFoundException] {
Write-Host \"Lecteur non trouvé !\"
}
catch{
Write-Host \"autre erreur\"
}[/code:1]
Or, il renvoie
autre erreur
Si tu fais le test suivant :
[code:1]
try{
Set-Location C:\toto -ErrorAction Error
}
catch [System.Management.Automation.RuntimeException] {
Write-Host \"RunTime Exception !\"
}
catch{
Write-Host \"autre erreur\"
}[/code:1]
Celui-ci renvoie :
RunTime Exception !
J'ai bien l'impression que la Cmdlet Set-Location ne renvoie qu'une erreur \"générique\"....
En fait, tu ne peux pas... En tout cas c'est ce que je comprends.
Si c'était le cas, le code suivant fonctionnerait :
[code:1] try{
Set-Location C:\toto -ErrorAction Error
}
catch [System.Management.Automation.ItemNotFoundException] {
Write-Host \"Répertoire introuvable !\"
}
catch [System.Management.Automation.DriveNotFoundException] {
Write-Host \"Lecteur non trouvé !\"
}
catch{
Write-Host \"autre erreur\"
}[/code:1]
Or, il renvoie
autre erreur
Si tu fais le test suivant :
[code:1]
try{
Set-Location C:\toto -ErrorAction Error
}
catch [System.Management.Automation.RuntimeException] {
Write-Host \"RunTime Exception !\"
}
catch{
Write-Host \"autre erreur\"
}[/code:1]
Celui-ci renvoie :
RunTime Exception !
J'ai bien l'impression que la Cmdlet Set-Location ne renvoie qu'une erreur \"générique\"....
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 15 ans 3 mois #8921
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:try/catch
Matthew BETTON écrit:
Une exception stoppe le traitement, c'est donc une erreur bloquante, et un Write-Error est non-bloquant.
Le souci est que le try/catch ne gére que les exceptions :/<br><br>Message édité par: Laurent Dardenne, à: 16/02/11 14:08
PS gére des erreurs bloquante et non-bloquante.J'ai bien l'impression que la Cmdlet Set-Location ne renvoie qu'une erreur \"générique\"....
Une exception stoppe le traitement, c'est donc une erreur bloquante, et un Write-Error est non-bloquant.
Le souci est que le try/catch ne gére que les exceptions :/<br><br>Message édité par: Laurent Dardenne, à: 16/02/11 14:08
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- try/catch