about_If
Description courte
Décrit une commande de langage que vous pouvez utiliser pour exécuter des listes d’instructions en fonction des résultats d’un ou plusieurs tests conditionnels.
Description longue
Vous pouvez utiliser l’instruction if
pour exécuter des blocs de code si un test conditionnel spécifié prend la valeur true. Vous pouvez également spécifier un ou plusieurs tests conditionnels supplémentaires à exécuter si tous les tests précédents ont la valeur false. Enfin, vous pouvez spécifier un bloc de code supplémentaire exécuté si aucun autre test conditionnel antérieur n’a la valeur true.
Syntaxe
L’exemple suivant montre la syntaxe de l’instruction if
:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Lorsque vous exécutez une if
instruction, PowerShell évalue l’expression <test1>
conditionnelle comme true ou false. Si <test1>
la valeur est true, <statement list 1>
les exécutions et PowerShell quittent l’instruction if
. Si <test1>
la valeur est false, PowerShell évalue la condition spécifiée par l’instruction <test2>
conditionnelle.
Pour plus d’informations sur l’évaluation booléenne, consultez about_Booleans.
Si <test2>
la valeur est true, <statement list 2>
les exécutions et PowerShell quittent l’instruction if
. Si la valeur <test1>
est false, <test2>
le bloc de <statement list 3
> code s’exécute et PowerShell quitte l’instruction if
.
Vous pouvez utiliser plusieurs elseif
instructions pour chaîner une série de tests conditionnels. Chaque test est exécuté uniquement si tous les tests précédents sont faux. Si vous devez créer une if
instruction qui contient de nombreuses elseif
instructions, envisagez d’utiliser une instruction Switch à la place.
Exemples :
L’instruction la plus simple if
contient une seule commande et ne contient elseif
aucune instruction ni aucune else
instruction. L’exemple suivant montre la forme la plus simple de l’instruction if
:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
Dans cet exemple, si la $a
variable est supérieure 2
à , la condition prend la valeur true et la liste des instructions s’exécute. Toutefois, si $a
elle est inférieure ou égale à 2
ou n’est pas une variable existante, l’instruction if
n’affiche pas de message.
En ajoutant une instruction Else, un message s’affiche lorsque $a est inférieur ou égal à 2. Comme l’illustre l’exemple suivant :
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
else {
Write-Host ("The value $a is less than or equal to 2," +
" is not created or is not initialized.")
}
Pour affiner cet exemple, vous pouvez utiliser l’instruction elseif
pour afficher un message lorsque la valeur est $a
égale à 2
. Comme l’illustre l’exemple suivant :
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
elseif ($a -eq 2) {
Write-Host "The value $a is equal to 2."
}
else {
Write-Host ("The value $a is less than 2 or" +
" was not created or initialized.")
}
Utilisation de la syntaxe de l’opérateur ternaire
PowerShell 7.0 a introduit une nouvelle syntaxe à l’aide de l’opérateur ternaire. Il suit la syntaxe de l’opérateur ternaire C# :
<condition> ? <if-true> : <if-false>
L’opérateur ternaire se comporte comme l’instruction simplifiée if-else
. L’expression <condition>
est évaluée et le résultat est converti en booléen pour déterminer la branche à évaluer ensuite :
- L’expression
<if-true>
est exécutée si l’expression<condition>
a la valeur true - L’expression
<if-false>
est exécutée si l’expression<condition>
a la valeur false
Par exemple :
$message = (Test-Path $path) ? "Path exists" : "Path not found"
Dans cet exemple, la valeur de $message
l’argument est quand Test-Path
elle est Path exists
retournée$true
. Lorsque Test-Path
cette propriété est retournée $false
, la valeur est $message
Path not found
.
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
Dans cet exemple, si le service est en cours d’exécution, il est arrêté et si son état n’est pas en cours d’exécution, il est démarré.
Si une <condition>
commande , ou <if-false>
une expression appelle <if-true>
une commande, vous devez l’encapsuler entre parenthèses. Si ce n’est pas le cas, PowerShell déclenche une exception d’argument pour la commande dans l’expression <condition>
et analyse des exceptions pour les expressions et <if-false>
les <if-true>
expressions.
Par exemple, PowerShell déclenche des exceptions pour ces ternaires :
Test-Path .vscode ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
Test-Path: A positional parameter cannot be found that accepts argument '?'.
ParserError:
Line |
1 | (Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
| ~
| You must provide a value expression following the '?' operator.
ParserError:
Line |
1 | (Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
| ~
| You must provide a value expression following the ':' operator.
Et cet exemple analyse :
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists