Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Tout ce que vous vouliez savoir sur l’instruction
Comme de nombreux autres langages, PowerShell contient des instructions pour l’exécution conditionnelle du code dans vos scripts. L’une de ces instructions est l’instruction If . Aujourd’hui, nous allons approfondir l’une des commandes les plus fondamentales dans PowerShell.
Note
La version originale de cet article est apparue sur le blog écrit par @KevinMarquette. L’équipe PowerShell remercie Kevin de partager ce contenu avec nous. Veuillez consulter son blog à PowerShellExplained.com.
Exécution conditionnelle
Vos scripts doivent souvent prendre des décisions et effectuer une logique différente en fonction de ces décisions.
C’est ce que je veux dire par l’exécution conditionnelle. Vous avez une instruction ou une valeur à évaluer, puis exécutez une section de code différente en fonction de cette évaluation. C’est exactement ce que fait l’instruction if .
L’instruction if.
Voici un exemple de base de l’instruction if :
$condition = $true
if ( $condition )
{
Write-Output "The condition was true"
}
La première chose que l’instruction if fait est d’évaluer l’expression entre parenthèses. S'il évalue à $true, il exécute les instructions entre les accolades. Si la valeur était $false, elle ignorerait ce bloc d’instructions.
Dans l’exemple précédent, l’instruction if n’évalue que la $condition variable. C'était $true et aurait exécuté la commande Write-Output à l’intérieur du bloc d’instructions.
Dans certains langages, vous pouvez placer une seule ligne de code après l’instruction if et elle est exécutée. Ce n’est pas le cas dans PowerShell. Vous devez fournir un ensemble d'accolades statement block pour que cela fonctionne correctement.
Opérateurs de comparaison
L’utilisation la plus courante de l’instruction if consiste à comparer deux éléments entre eux. PowerShell a des opérateurs spéciaux pour différents scénarios de comparaison. Lorsque vous utilisez un opérateur de comparaison, la valeur du côté gauche est comparée à la valeur du côté droit.
-eq pour l’égalité
La -eq vérification de l’égalité entre deux valeurs permet de s’assurer qu’elles sont égales les unes aux autres.
$value = Get-MysteryValue
if ( 5 -eq $value )
{
# do something
}
Dans cet exemple, je prends une valeur connue de 5 et je la compare à mon $value pour voir s'ils correspondent.
L’un des cas d’usage possibles consiste à vérifier l’état d’une valeur avant de prendre une action dessus. Vous pourriez obtenir un service et vérifier que l’état était en train de fonctionner avant que vous ne l'appeliez Restart-Service.
Il est courant dans d’autres langages comme C# d’utiliser == pour l’égalité (ex : 5 == $value) mais cela ne fonctionne pas avec PowerShell. Une autre erreur courante que les gens font est d’utiliser le signe égal (ex : 5 = $value) réservé à l’attribution de valeurs à des variables. En plaçant votre valeur connue à gauche, cela rend cette erreur plus maladroite à faire.
Cet opérateur (et d’autres) a quelques variantes.
-
-eqÉgalité non sensible à la casse -
-ieqÉgalité non sensible à la casse -
-ceqÉgalité sensible à la casse
-ne pas égal
De nombreux opérateurs ont un opérateur associé qui vérifie le résultat opposé.
-ne vérifie que les valeurs ne sont pas égales les unes des autres.
if ( 5 -ne $value )
{
# do something
}
Utilisez cette option pour vous assurer que l’action s’exécute uniquement si la valeur n’est pas 5. Un bon cas d'utilisation serait de vérifier si un service est en cours d'exécution avant d'essayer de le démarrer.
Variations:
-
-nene respectant pas la casse non égale -
-inene respectant pas la casse non égale -
-cnerespectant la casse non égale
Il s’agit de variantes inverses de -eq. Je regrouperai ces types lorsque je répertorie les variantes pour d’autres opérateurs.
-gt pour supérieur à, -ge pour supérieur ou égal à, -lt pour inférieur à, -le pour inférieur ou égal à
Ces opérateurs sont utilisés lors de la vérification pour voir si une valeur est supérieure ou inférieure à une autre valeur.
Le -gt -ge -lt -le stand pour GreaterThan, GreaterThanOrEqual, LessThan et LessThanOrEqual.
if ( $value -gt 5 )
{
# do something
}
Variations:
-
-gtsupérieur à -
-igtsupérieur à, insensible à la casse -
-cgtsupérieur à, casse sensible -
-gesupérieur ou égal à -
-igesupérieur ou égal, insensible à la casse -
-cgesupérieur ou égal, sensible à la casse -
-ltinférieur à -
-iltinférieur à, insensible à la casse -
-cltinférieur à, sensible à la casse -
-leinférieur ou égal à -
-ileinférieur ou égal, non sensible à la casse -
-cleinférieur ou égal, sensible à la casse
Je ne sais pas pourquoi vous utiliseriez des options sensibles à la casse et insensibles pour ces opérateurs.
correspondances similaires à des caractères génériques
PowerShell a sa propre syntaxe de correspondance de modèle basé sur des jokers et vous pouvez l’utiliser avec l’opérateur -like. Ces modèles génériques sont assez simples.
-
?correspond à n’importe quel caractère unique -
*correspond à n’importe quel nombre de caractères
$value = 'S-ATX-SQL01'
if ( $value -like 'S-*-SQL??')
{
# do something
}
Il est important de souligner que le modèle correspond à la chaîne entière. Si vous devez faire correspondre quelque chose au milieu de la chaîne, vous devez placer les * aux deux extrémités de la chaîne.
$value = 'S-ATX-SQL02'
if ( $value -like '*SQL*')
{
# do something
}
Variations:
-
-likecaractère générique insensible à la casse -
-ilikecaractère générique ne respectant pas la casse -
-clikeCaractère générique sensible à la casse -
-notlikecaractères génériques non respectant la casse non mis en correspondance -
-inotlikecaractères génériques non respectant la casse non mis en correspondance -
-cnotlikeCaractère générique sensible à la casse non mis en correspondance
-correspond à l’expression régulière
L’opérateur -match vous permet de vérifier une chaîne pour une correspondance basée sur des expressions régulières. Utilisez cette option lorsque les modèles génériques ne sont pas suffisamment flexibles pour vous.
$value = 'S-ATX-SQL01'
if ( $value -match 'S-\w\w\w-SQL\d\d')
{
# do something
}
Un modèle regex correspond n’importe où dans la chaîne par défaut. Vous pouvez donc spécifier une sous-chaîne que vous souhaitez mettre en correspondance comme suit :
$value = 'S-ATX-SQL01'
if ( $value -match 'SQL')
{
# do something
}
Regex est un langage complexe à part entière qui mérite qu'on s'y intéresse. J’en parle plus et -matchles nombreuses façons d’utiliser regex dans un autre article.
Variations:
-
-matchregex ne respectant pas la casse -
-imatchregex ne respectant pas la casse -
-cmatchregex respectant la casse -
-notmatchregex ne respectant pas la casse et non mis en correspondance -
-inotmatchregex ne respectant pas la casse et non mis en correspondance -
-cnotmatchregex sensible à la casse non correspondante
-est de type
Vous pouvez vérifier le type d’une valeur avec l’opérateur -is .
if ( $value -is [string] )
{
# do something
}
Vous pouvez l’utiliser si vous travaillez avec des classes ou acceptez différents objets sur le pipeline. Vous pouvez avoir un service ou un nom de service comme entrée. Vérifiez ensuite si vous avez un service et récupérez le service si vous n’avez que le nom.
if ( $Service -isnot [System.ServiceProcess.ServiceController] )
{
$Service = Get-Service -Name $Service
}
Variations:
-
-isde type -
-isnotnon de type
Opérateurs de collection
Lorsque vous utilisez les opérateurs précédents avec une valeur unique, le résultat est $true ou $false. Cela est géré légèrement différemment lors de l’utilisation d’une collection. Chaque élément de la collection est évalué et l’opérateur retourne chaque valeur évaluée à $true.
PS> 1,2,3,4 -eq 3
3
Cela fonctionne toujours correctement dans une if instruction. Par conséquent, une valeur est retournée par votre opérateur, puis l’instruction entière est $true.
$array = 1..6
if ( $array -gt 3 )
{
# do something
}
Il y a un petit piège caché dans les détails ici que j’ai besoin de souligner. Lors de l’utilisation de l’opérateur -ne de cette façon, il est facile de regarder à tort la logique vers l’arrière. L’utilisation -ne avec une collection retourne $true si un élément de la collection ne correspond pas à votre valeur.
PS> 1,2,3 -ne 4
1
2
3
Cela peut ressembler à une astuce intelligente, mais nous avons des opérateurs -contains et -in qui gèrent cela plus efficacement. Et -notcontains fait ce que vous attendez.
-Contient
L’opérateur -contains vérifie la collection pour votre valeur. Dès qu’il trouve une correspondance, il retourne $true.
$array = 1..6
if ( $array -contains 3 )
{
# do something
}
Il s’agit de la meilleure façon de voir si une collection contient votre valeur. L'utilisation de Where-Object (ou -eq) parcourt l'ensemble de la liste à chaque fois et est beaucoup plus lente.
Variations:
-
-containsCorrespondance insensible à la casse -
-icontainsCorrespondance insensible à la casse -
-ccontainsCorrespondance sensible à la casse -
-notcontainsinsensible à la casse et pas correspondante -
-inotcontainsinsensible à la casse et non correspondante -
-cnotcontainsSensible à la casse non correspondante
-in
L’opérateur -in est tout comme l’opérateur -contains , sauf que la collection se trouve sur le côté droit.
$array = 1..6
if ( 3 -in $array )
{
# do something
}
Variations:
-
-inCorrespondance insensible à la casse -
-iinCorrespondance insensible à la casse -
-cinCorrespondance sensible à la casse -
-notinne respectant pas la casse et non mis en correspondance -
-inotininsensible à la casse et non correspondant -
-cnotinSensibilité à la casse non correspondante
Opérateurs logiques
Les opérateurs logiques sont utilisés pour inverser ou combiner d’autres expressions.
-Pas
L’opérateur -not retourne une expression de $false vers $true ou de $true vers $false. Voici un exemple où nous voulons effectuer une action quand Test-Path c’est $false.
if ( -not ( Test-Path -Path $path ) )
La plupart des opérateurs dont nous avons parlé ont une variante où vous n’avez pas besoin d’utiliser l’opérateur -not . Mais il y a encore des moments qu’il est utile.
! opérateur
Vous pouvez utiliser ! comme alias pour -not.
if ( -not $value ){}
if ( !$value ){}
Vous pouvez voir ! utilisé plus souvent par des personnes provenant d'autres langages comme C#. Je préfère le rédiger parce que je trouve qu'il est difficile de voir rapidement lorsque je consulte mes scripts.
-et
Vous pouvez combiner des expressions avec l’opérateur -and . Lorsque vous faites cela, les deux côtés doivent être $true pour que l’expression entière soit $true.
if ( ($age -gt 13) -and ($age -lt 55) )
Dans cet exemple, $age doit être de 13 ou plus pour le côté gauche et inférieur à 55 pour le côté droit. J’ai ajouté des parenthèses supplémentaires pour le rendre plus clair dans cet exemple, mais ils sont facultatifs tant que l’expression est simple. Voici le même exemple sans eux.
if ( $age -gt 13 -and $age -lt 55 )
L’évaluation se produit de gauche à droite. Si le premier élément est évalué à $false, il sort prématurément et ne réalise pas la comparaison de droite. Cela est pratique lorsque vous devez vous assurer qu’une valeur existe avant de l’utiliser. Par exemple, Test-Path lève une erreur si vous lui donnez un $null chemin d’accès.
if ( $null -ne $path -and (Test-Path -Path $path) )
-Ou
Vous pouvez spécifier deux expressions et retourner $true si l'une ou l'autre est $true.
if ( $age -le 13 -or $age -ge 55 )
Tout comme avec l'opérateur -and, l'évaluation se produit de gauche à droite. Sauf que si la première partie est $true, l’instruction entière est $true et ne traite pas le reste de l’expression.
Notez également le fonctionnement de la syntaxe pour ces opérateurs. Vous avez besoin de deux expressions distinctes. J’ai vu des utilisateurs essayer de faire quelque chose comme ça $value -eq 5 -or 6 sans se rendre compte de leur erreur.
-xor exclusif ou
Celui-ci est un peu inhabituel.
-xorautorise une seule expression à s'évaluer en $true. Par conséquent, si les deux éléments sont $false ou si les deux éléments sont $true, alors l'expression entière est $false. Une autre façon de regarder cela est que l’expression est uniquement $true lorsque les résultats de l’expression sont différents.
Il est rare que quelqu’un utilise jamais cet opérateur logique et je ne peux pas penser à un bon exemple quant à la raison pour laquelle je l’utiliserais jamais.
Opérateurs de bits
Les opérateurs bit à bit effectuent des calculs sur les bits au sein des valeurs et produisent une nouvelle valeur comme résultat. L’enseignement des opérateurs au niveau du bit dépasse la portée de cet article, mais voici la liste d’entre eux.
-
-bandbinaire ET -
-borOU binaire -
-bxorOU exclusif binaire -
-bnotNON binaire -
-shldécaler vers la gauche -
-shrmaj vers la droite
Expressions dans PowerShell
Nous pouvons utiliser PowerShell en mode standard à l’intérieur de l’instruction conditionnelle.
if ( Test-Path -Path $Path )
Test-Path retourne $true ou $false lorsqu’il s’exécute. Cela s’applique également aux commandes qui retournent d’autres valeurs.
if ( Get-Process Notepad* )
Il prend la $true valeur s’il existe un processus retourné et $false s’il n’y en a pas. Il est parfaitement valide d’utiliser des expressions de pipeline ou d’autres instructions PowerShell comme suit :
if ( Get-Process | where Name -EQ Notepad )
Ces expressions peuvent être combinées entre elles avec les opérateurs -and et -or, mais vous devrez peut-être utiliser des parenthèses pour les décomposer en sous-expressions.
if ( (Get-Process) -and (Get-Service) )
Vérification de $null
L’absence de résultat ou bien une valeur $null est évaluée à $false dans l’instruction if. Lorsque vous vérifiez spécifiquement $null, il est recommandé de placer le $null côté gauche.
if ( $null -eq $value )
Il existe plusieurs nuances lors de la gestion $null des valeurs dans PowerShell. Si vous êtes intéressé par la plongée plus profonde, j’ai un article sur tout ce que vous vouliez savoir sur $null.
Affectation de variable dans la condition
J'ai presque oublié d'ajouter celui-ci jusqu'à ce que Prasoon Karunan V me le rappelle.
if ($process=Get-Process notepad -ErrorAction Ignore) {$process} else {$false}
Normalement, lorsque vous affectez une valeur à une variable, la valeur n’est pas transmise au pipeline ou à la console. Lorsque vous effectuez une affectation de variable dans une sous-expression, elle est transmise au pipeline.
PS> $first = 1
PS> ($second = 2)
2
Découvrez comment l’affectation $first n’a pas de sortie alors que l’affectation $second en a. Lorsqu’une affectation est effectuée dans une if instruction, elle s’exécute comme l’affectation $second ci-dessus. Voici un exemple propre sur la façon dont vous pouvez l’utiliser :
if ( $process = Get-Process Notepad* )
{
$process | Stop-Process
}
Si une valeur est attribuée à $process, alors $true l'instruction est exécutée et $process s'arrête.
Assurez-vous que vous ne confondez pas cela avec -eq car ce n’est pas une vérification d’égalité. Il s’agit d’une fonctionnalité plus obscure que la plupart des gens ne réalisent pas fonctionne de cette façon.
Affectation de variable à partir du bloc d’instructions
Vous pouvez également utiliser le if bloc d’instructions pour affecter une valeur à une variable.
$discount = if ( $age -ge 55 )
{
Get-SeniorDiscount
}
elseif ( $age -le 13 )
{
Get-ChildDiscount
}
else
{
0.00
}
Chaque bloc de script écrit les résultats des commandes, ou la valeur, en tant que sortie. Nous pouvons affecter le résultat de l’instruction if à la $discount variable. Cet exemple peut avoir tout aussi facilement affecté ces valeurs à la $discount variable directement dans chaque bloc d’instructions. Je ne peux pas dire que je l’utilise souvent avec l’affirmation if , mais j’ai un exemple où j’ai utilisé cela récemment.
Chemin d’exécution alternatif
L’instruction if vous permet de spécifier une action non seulement lorsque l’instruction est $true, mais également pour le moment où elle est $false. C’est là que l’instruction else entre en jeu.
autre
L’instruction else est toujours la dernière partie de l’instruction if lorsqu’elle est utilisée.
if ( Test-Path -Path $Path -PathType Leaf )
{
Move-Item -Path $Path -Destination $archivePath
}
else
{
Write-Warning "$path doesn't exist or isn't a file."
}
Dans cet exemple, nous vérifions le $path pour s’assurer qu’il s’agit d’un fichier. Si nous trouvons le fichier, nous le déplacerons. Sinon, nous écrivons un avertissement. Ce type de logique de branchement est très courant.
Imbriqué si
Les instructions if et else acceptent un bloc de script, ce qui nous permet de placer n’importe quelle commande PowerShell dedans, y compris une autre instruction if. Cela vous permet d’utiliser une logique beaucoup plus complexe.
if ( Test-Path -Path $Path -PathType Leaf )
{
Move-Item -Path $Path -Destination $archivePath
}
else
{
if ( Test-Path -Path $Path )
{
Write-Warning "A file was required but a directory was found instead."
}
else
{
Write-Warning "$path could not be found."
}
}
Dans cet exemple, nous testons d’abord le chemin heureux, puis prenons des mesures dessus. En cas d’échec, nous effectuons une autre vérification et fournissons des informations plus détaillées à l’utilisateur.
Elseif
Nous ne sommes pas limités à un seul contrôle conditionnel. Nous pouvons chaîner les instructions if et else ensemble au lieu de les imbriquer, en utilisant l'instruction elseif.
if ( Test-Path -Path $Path -PathType Leaf )
{
Move-Item -Path $Path -Destination $archivePath
}
elseif ( Test-Path -Path $Path )
{
Write-Warning "A file was required but a directory was found instead."
}
else
{
Write-Warning "$path could not be found."
}
L’exécution se produit du haut au bas. L’instruction supérieure if est évaluée en premier. Si c’est $falsele cas, il descend vers le bas vers le suivant elseif ou else dans la liste. Cette dernière else est l’action par défaut à entreprendre si aucun des autres ne retourne $true.
switch
À ce stade, je dois mentionner l’affirmation switch . Il fournit une autre syntaxe pour effectuer plusieurs comparaisons avec une valeur. Avec le switch, vous spécifiez une expression et ce résultat est comparé à plusieurs valeurs différentes. Si l’une de ces valeurs correspond, le bloc de code correspondant est exécuté. Examinez cet exemple :
$itemType = 'Role'
switch ( $itemType )
{
'Component'
{
'is a component'
}
'Role'
{
'is a role'
}
'Location'
{
'is a location'
}
}
Il y a trois valeurs possibles qui peuvent correspondre au $itemType. Dans ce cas, il correspond à Role. J’ai utilisé un exemple simple pour vous donner une exposition à l’opérateur switch . Je parle plus de tout ce que vous avez jamais voulu savoir sur l’instruction switch dans un autre article.
Tableau en ligne
J’ai une fonction appelée Invoke-SnowSql qui lance un exécutable avec plusieurs arguments de ligne de commande. Voici un clip de cette fonction où je crée le tableau d’arguments.
$snowSqlParam = @(
'--accountname', $Endpoint
'--username', $Credential.UserName
'--option', 'exit_on_error=true'
'--option', 'output_format=csv'
'--option', 'friendly=false'
'--option', 'timing=false'
if ($Debug)
{
'--option', 'log_level=DEBUG'
}
if ($Path)
{
'--filename', $Path
}
else
{
'--query', $singleLineQuery
}
)
Les variables $Debug et $Path sont des paramètres de la fonction fournis par l’utilisateur final.
J'évalue ces éléments en ligne dans l'initialisation de mon tableau. Si $Debug c’est vrai, ces valeurs tombent dans le $snowSqlParam bon endroit. Il en va de même pour la $Path variable.
Simplifier les opérations complexes
Il est inévitable que vous rencontriez une situation qui a beaucoup trop de comparaisons à vérifier et votre if instruction défile bien au-delà à droite de l’écran.
$user = Get-ADUser -Identity $UserName
if ( $null -ne $user -and $user.Department -eq 'Finance' -and $user.Title -match 'Senior' -and $user.HomeDrive -notlike '\\server\*' )
{
# Do Something
}
Ils peuvent être difficiles à lire et qui vous rendent plus enclin à faire des erreurs. Il y a quelques choses que nous pouvons faire à ce sujet.
Continuation de ligne
Certains opérateurs dans PowerShell vous permettent d’encapsuler la commande à la ligne suivante. Les opérateurs logiques -and et -or sont utiles si vous souhaitez diviser votre expression en plusieurs lignes.
if ($null -ne $user -and
$user.Department -eq 'Finance' -and
$user.Title -match 'Senior' -and
$user.HomeDrive -notlike '\\server\*'
)
{
# Do Something
}
Il se passe encore beaucoup de choses là, mais placer chaque élément sur une ligne distincte fait une grande différence. Je l’utilise généralement lorsque j’obtiens plus de deux comparaisons ou si je dois faire défiler vers la droite pour lire l’une des logiques.
Pré-calcul des résultats
Nous pouvons extraire cette instruction de l’instruction if et vérifier uniquement le résultat.
$needsSecureHomeDrive = $null -ne $user -and
$user.Department -eq 'Finance' -and
$user.Title -match 'Senior' -and
$user.HomeDrive -notlike '\\server\*'
if ( $needsSecureHomeDrive )
{
# Do Something
}
Cela se sent juste beaucoup plus propre que l’exemple précédent. Vous avez également la possibilité d’utiliser un nom de variable qui explique vraiment ce que vous vérifiez. Il s’agit également d’un exemple de code auto-documentant qui enregistre des commentaires inutiles.
Instructions if multiples
Nous pouvons diviser cela en plusieurs déclarations et les vérifier une par une. Dans ce cas, nous utilisons un indicateur ou une variable de suivi pour combiner les résultats.
$skipUser = $false
if( $null -eq $user )
{
$skipUser = $true
}
if( $user.Department -ne 'Finance' )
{
Write-Verbose "isn't in Finance department"
$skipUser = $true
}
if( $user.Title -match 'Senior' )
{
Write-Verbose "Doesn't have Senior title"
$skipUser = $true
}
if( $user.HomeDrive -like '\\server\*' )
{
Write-Verbose "Home drive already configured"
$skipUser = $true
}
if ( -not $skipUser )
{
# do something
}
J'ai dû inverser la logique pour que le système d'indicateur fonctionne correctement. Chaque évaluation est une déclaration individuelle if. L’avantage est que lorsque vous déboguez, vous pouvez savoir exactement ce que fait la logique. J'ai pu ajouter une bien meilleure verbosité simultanément.
L’inconvénient évident est que c’est beaucoup plus de code à écrire. Le code est plus complexe à examiner, car il prend une seule ligne de logique et l’explose en 25 lignes ou plus.
Utilisation des fonctions
Nous pouvons également déplacer toutes ces logiques de validation dans une fonction. Voyez comme c'est propre à première vue.
if ( Test-SecureDriveConfiguration -ADUser $user )
{
# do something
}
Vous devez toujours créer la fonction pour effectuer la validation, mais cela facilite grandement l’utilisation de ce code. Il facilite le test de ce code. Dans vos tests, vous pouvez simuler l’appel à Test-ADDriveConfiguration et vous n’avez besoin que de deux tests pour cette fonction. Un cas où il renvoie $true et un cas où il renvoie $false. Le test de l’autre fonction est plus simple, car il est si petit.
Le corps de cette fonction peut toujours être celui d’un one-liner avec lequel nous avons commencé ou de la logique développée que nous avons utilisée dans la dernière section. Cela fonctionne bien pour les deux scénarios et vous permet de modifier facilement cette implémentation ultérieurement.
Gestion des erreurs
L’une des principales utilisations de l’instruction if consiste à vérifier les conditions d’erreur avant de rencontrer des erreurs. Un bon exemple consiste à vérifier si un dossier existe déjà avant de tenter de le créer.
if ( -not (Test-Path -Path $folder) )
{
New-Item -Type Directory -Path $folder
}
J’aime dire que si vous attendez une exception, alors ce n’est pas vraiment une exception. Vérifiez donc vos valeurs et validez vos conditions dans lesquelles vous pouvez.
Si vous voulez plonger un peu plus dans la gestion des exceptions réelles, j’ai un article sur tout ce que vous avez jamais voulu savoir sur les exceptions.
Mots finaux
L’instruction if est une instruction aussi simple, mais elle est un élément fondamental de PowerShell. Vous vous retrouverez à utiliser ceci de nombreuses fois dans presque tous les scripts que vous écrivez. J’espère que vous avez une meilleure compréhension qu’auparavant.