Quand dois-je utiliser Write-Error par rapport a Throw ? Erreurs terminantes et non terminantes

Quand dois-je utiliser Write-Error par rapport a Throw ? Erreurs terminantes et non terminantes

Write-Error doit etre utilise si vous souhaitez informer l’utilisateur d’une erreur non critique. Par defaut, il ne fait qu’afficher un message d’erreur en texte rouge dans la console. Il n’arrete pas un pipeline ou une boucle. Throw, en revanche, produit ce qu’on appelle une erreur terminante. Si vous utilisez throw, le pipeline et/ou la boucle en cours seront termines. En fait, toute l’execution sera terminee a moins que vous n’utilisiez une structure trap ou try/catch pour gerer l’erreur terminante.

Il y a une chose a noter : si vous definissez $ErrorActionPreference sur "Stop" et utilisez Write-Error, cela produira une erreur terminante.

Dans le script que vous avez mentionne, nous trouvons ceci :

if ($url.Contains("http")) {
       $request = [System.Net.HttpWebRequest]::Create($url)
}
else {
       $URL_Format_Error = [string]"Connection protocol not specified. Recommended action: Try again using protocol (for example 'http://" + $url + "') instead. Function aborting..."
       Write-Error $URL_Format_Error
    return
   }

Il semble que l’auteur de cette fonction voulait arreter l’execution de cette fonction et afficher un message d’erreur a l’ecran, mais ne voulait pas que l’ensemble du script cesse de s’executer. L’auteur du script aurait pu utiliser throw, mais cela aurait signifie que vous auriez du utiliser un try/catch lors de l’appel de la fonction.

return quitte la portee actuelle, qui peut etre une fonction, un script ou un bloc de script. C’est mieux illustre avec du code :

# Une boucle foreach.
foreach ( $i in  (1..10) ) { Write-Host $i ; if ($i -eq 5) { return } }

# Une boucle for.
for ($i = 1; $i -le 10; $i++) { Write-Host $i ; if ($i -eq 5) { return } }

Sortie pour les deux :

1
2
3
4
5

Un piege ici est l’utilisation de return avec ForEach-Object. Cela n’interrompra pas le traitement comme on pourrait s’y attendre.

Plus d’informations :

(Reponse tronquee)