Pour PowerShell 5 (installation par défaut pour les machines Windows pour l'avenir prévisible), vous pouvez bien sûr utiliser un point-virgule pour séparer les instructions, mais toutes les instructions seront exécutées par défaut même si l'une échoue. Personnellement, je préfère exécuter les choses de sorte que si une chose échoue, la ligne entière s'arrête dans le REPL et j'imagine que beaucoup d'autres personnes le font aussi.
$ErrorActionPreference
vous permet de contrôler le comportement de ce qui se passe lorsqu'une instruction échoue mais est une erreur non terminale (qui sont la plupart des erreurs, y compris les erreurs de commande non trouvée). Vous pouvez définir cette variable $ErrorActionPreference="Stop"
afin d'imiter le comportement de &&
dans Bash et PowerShell 7 pour la portée de cette variable.
$ErrorActionPreference="Stop"
# Saut de ligne
fakeCommand; echo "Here"
J'ai eu du mal à trouver une documentation précise pour ce comportement, mais cette variable semble être dynamiquement délimitée afin que vous puissiez la remplacer temporairement dans un bloc si vous ne souhaitez pas la définir globalement.
Invoke-Command -ScriptBlock {$ErrorActionPreference="Stop"; fakeCommand; echo "Here"}
Enfin, si vous voulez quelque chose de réutilisable, vous pouvez utiliser cette fonction d'ordre supérieur.
function Run-Block-With-Error($block) {
$ErrorActionPreference="Stop"
Invoke-Command -ScriptBlock $block
}
Qui est ensuite utilisé comme suit.
Run-Block-With-Error {fakeCommand; echo "Here"}
Notez dans les exemples ci-dessus que "Here" n'est pas imprimé car la commande fakeCommand
échoue car ce n'est pas une commande réelle.
J'ai testé le code fourni dans cette solution pour PowerShell 5 et 7 et il devrait être entièrement portable, du moins sur Windows. Bien que PowerShell 7 devrait être très similaire sur différentes plateformes, je n'ai pas testé ces commandes sur Linux ou MacOS.
7 votes
Fun Note: Entre les ports série et la sérialisation, cette question est virtuellement impossible à rechercher.
1 votes
Pour être nerd... Il est très facile de le rechercher. C'est juste assez difficile d'obtenir un ensemble de résultats pertinents. :) (+1 pour la super question)
2 votes
Similaire à exécution conditionnelle (&& et ||) en powershell.