Question try/catch

Plus d'informations
il y a 15 ans 3 mois #8899 par jojo
try/catch a été créé par jojo
Hello les PowerShelleurs :laugh:

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 :laugh:<br><br>Message édité par: jojo, à: 15/02/11 18:27

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 mois #8900 par Olivier
Réponse de Olivier sur le sujet Re:try/catch
Bonjour Jojo :-)

Peut-être des informations utiles sur ce lien

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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 \&quot;Erreur : \&quot; $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 \&quot;jeter\&quot; l'exception, qui elle sera finalement trappée.

Au final, le répertoire \&quot;toto\&quot; 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.

Plus d'informations
il y a 15 ans 3 mois #8906 par jojo
Réponse de jojo sur le sujet Re:try/catch
Hello Olivier et Matthew :laugh:

@Olivier: merci pour le lien, c'est une bonne source ;) , mais malheureusement ça ne traite pas mon cas :(

@Matthew: merci pour l'exemple commenté :P , 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] \&quot;OK\&quot; mais ça ne veux pas fonctionner avec le cmdlet set-location !
}
catch [IO.DirectoryNotFoundException] {
Write-Host \&quot;Répertoire introuvable\&quot;
}
catch{
Write-Host \&quot;autre erreur\&quot;
}
[/code:1]


Merci :laugh:<br><br>Message édité par: jojo, à: 16/02/11 06:45

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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 :side:

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 \&quot;Répertoire introuvable !\&quot;
}
catch [System.Management.Automation.DriveNotFoundException] {
Write-Host \&quot;Lecteur non trouvé !\&quot;
}
catch{
Write-Host \&quot;autre erreur\&quot;
}[/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 \&quot;RunTime Exception !\&quot;
}
catch{
Write-Host \&quot;autre erreur\&quot;
}[/code:1]


Celui-ci renvoie :

RunTime Exception !

J'ai bien l'impression que la Cmdlet Set-Location ne renvoie qu'une erreur \&quot;générique\&quot;....

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 mois #8921 par xyz
Réponse de xyz sur le sujet Re:try/catch
Matthew BETTON écrit:

J'ai bien l'impression que la Cmdlet Set-Location ne renvoie qu'une erreur \&quot;générique\&quot;....

PS gére des erreurs bloquante et non-bloquante.
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
Propulsé par Kunena