Notes
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 avez toujours voulu savoir sur l’instruction
À l’instar de nombreux autres langages, PowerShell comporte des instructions pour l’exécution conditionnelle de code dans vos scripts. L’une de ces instructions est l’instruction If. Nous allons aujourd’hui étudier de manière approfondie l’une des commandes les plus fondamentales de PowerShell.
Notes
La version originale de cet article est parue sur le blog écrit par @KevinMarquette. L’équipe PowerShell remercie Kevin d’avoir partagé ce contenu. Consultez son blog à l’adresse PowerShellExplained.com.
Exécution conditionnelle
Vos scripts doivent souvent prendre des décisions et exécuter une logique différente en fonction de ces décisions.
C’est ce qu’on appelle une exécution conditionnelle. Vous avez une instruction ou une valeur à évaluer, et vous exécutez une autre section de code en fonction de cette évaluation. C’est là précisément qu’intervient l’instruction if
.
Instruction if
Voici un exemple de base de l’instruction if
:
$condition = $true
if ( $condition )
{
Write-Output "The condition was true"
}
L’instruction if
commence par évaluer l’expression entre parenthèses. Si l’évaluation génère une valeur $true
, elle exécute l’élément scriptblock
entre les accolades. Si la valeur est $false
, elle ignore cet élément scriptblock.
Dans l’exemple précédent, l’instruction if
a simplement évalué la variable $condition
. Cette valeur $true
aurait exécuté la commande Write-Output
à l’intérieur du scriptblock.
Dans certains langages, vous pouvez placer une simple ligne de code après l’instruction if
afin de l’exécuter. Ce n’est pas le cas dans PowerShell. Vous devez fournir un élément scriptblock
complet avec entre accolades pour que l’instruction fonctionne correctement.
Opérateurs de comparaison
Le plus souvent, l’instruction if
sert à comparer deux éléments. PowerShell propose des opérateurs spéciaux pour différents scénarios de comparaison. Lorsque vous utilisez un opérateur de comparaison, la valeur à gauche est comparée à la valeur à droite.
-eq pour égalité
L’opérateur -eq
vérifie l’égalité entre deux valeurs pour s’assurer qu’elles sont égales.
$value = Get-MysteryValue
if ( 5 -eq $value )
{
# do something
}
Dans cet exemple, je prends une valeur connue 5
et je la compare à ma valeur $value
pour vérifier si elles correspondent.
Un cas d’utilisation possible consiste à vérifier l’état d’une valeur avant d’effectuer une action sur celle-ci. Vous pouvez obtenir un service et vérifier que l’état était en cours d’exécution avant d’appeler Restart-Service
sur ce service.
Dans d’autres langages comme C#, il est courant d’utiliser ==
pour l’égalité (ex : 5 == $value
), mais cela ne fonctionne pas avec PowerShell. Une autre erreur courante commise consiste à utiliser le signe égal (ex : 5 = $value
) qui est réservé à l’attribution de valeurs aux variables. En plaçant votre valeur connue sur la partie gauche, vous limitez les risques de commettre cette erreur.
Cet opérateur (et d’autres) comportent quelques variantes.
-eq
égalité, sans respect de la casse-ieq
égalité, sans respect de la casse-ceq
égalité, avec respect de la casse
-ne non égal à
De nombreux opérateurs intègrent un opérateur associé qui vérifie le résultat inverse. -ne
vérifie que les valeurs ne sont pas égales.
if ( 5 -ne $value )
{
# do something
}
Utilisez-le pour vous assurer que l’action s’exécute uniquement si la valeur n’est pas 5
. Ce type d’opérateur est notamment utile pour vérifier si un service était à l’état en cours d’exécution avant d’essayer de le démarrer.
Variantes :
-ne
non égal à, sans respect de la casse-ine
non égal à, sans respect de la casse-cne
non égal à, avec respect de la casse
Il s’agit de variantes inverses de -eq
. Je regroupe ces types lorsque je répertorie des variantes pour d’autres opérateurs.
-gt -ge -lt -le pour supérieur à ou inférieur à
Ces opérateurs servent à vérifier si une valeur est supérieure ou inférieure à une autre valeur.
Les valeurs -gt -ge -lt -le
signifient GreaterThan (supérieur à), GreaterThanOrEqual (supérieur ou égal à), LessThan (inférieur à) et LessThanOrEqual (inférieur ou égal à).
if ( $value -gt 5 )
{
# do something
}
Variantes :
-gt
supérieur à-igt
supérieur à, sans respect de la casse-cgt
supérieur à, avec respect de la casse-ge
supérieur ou égal à-ige
supérieur ou égal à, sans respect de la casse-cge
supérieur ou égal à, avec respect de la casse-lt
inférieur à-ilt
inférieur à, sans respect de la casse-clt
inférieur à, avec respect de la casse-le
inférieur ou égal à-ile
inférieur ou égal à, sans respect de la casse-cle
inférieur ou égal à, avec respect de la casse
Il n’y a aucune raison d’utiliser des options qui respectent ou non la casse pour ces opérateurs.
-like correspondances de caractères génériques
PowerShell possède sa propre syntaxe de correspondance de modèles de caractères génériques, et vous pouvez l’utiliser avec l’opérateur -like
. Ces modèles de caractères génériques sont assez simples.
?
représente n'importe quel caractère unique*
représente 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 mettre en correspondance un élément au milieu de la chaîne, vous devez placer le symbole *
aux deux extrémités de celle-ci.
$value = 'S-ATX-SQL02'
if ( $value -like '*SQL*')
{
# do something
}
Variantes :
-like
caractère générique, sans respect de la casse-ilike
caractère générique, sans respect de la casse-clike
caractère générique, avec respect de la casse-notlike
caractère générique sans correspondance, sans respect de la casse-inotlike
caractère générique sans correspondance, sans respect de la casse-cnotlike
caractère générique sans correspondance, avec respect de la casse
-match expression régulière
L’opérateur -match
vous permet de vérifier la correspondance d’une chaîne en fonction d’une expression régulière. Utilisez cet opérateur si les modèles de caractères génériques ne vous offrent pas assez de souplesse.
$value = 'S-ATX-SQL01'
if ( $value -match 'S-\w\w\w-SQL\d\d')
{
# do something
}
Par défaut, un modèle d’expression régulière (regex) représente n’importe quelle partie de la chaîne. Vous pouvez donc définir la correspondance d’une sous-chaîne de la façon suivante :
$value = 'S-ATX-SQL01'
if ( $value -match 'SQL')
{
# do something
}
Regex est un langage complexe, qui mérite d’être examiné. J’aborderai plus en détail l’opérateur -match
et les nombreuses façons d’utiliser regex dans un autre article.
Variantes :
-match
regex, sans respect de la casse-imatch
regex, sans respect de la casse-cmatch
regex, avec respect de la casse-notmatch
regex sans correspondance, sans respect de la casse-inotmatch
regex sans correspondance, sans respect de la casse-cnotmatch
regex sans correspondance, avec respect de la casse
-is de type
Vous pouvez vérifier le type d’une valeur à l’aide de l’opérateur -is
.
if ( $value -is [string] )
{
# do something
}
Vous pouvez l’utiliser avec des classes ou pour accepter différents objets sur le pipeline. Vous pouvez utiliser un service ou un nom de service comme entrée. Puis pour vérifier si vous disposez d’un service et pour extraire le service si vous avez uniquement le nom.
if ( $Service -isnot [System.ServiceProcess.ServiceController] )
{
$Service = Get-Service -Name $Service
}
Variantes :
-is
de type-isnot
non de type
Ensemble d’opérateurs
Lorsque vous utilisez les opérateurs précédents avec une valeur unique, le résultat est $true
ou $false
. Avec un ensemble d’opérateurs, la procédure est légèrement différente. Chaque élément de l’ensemble est évalué, et l’opérateur retourne chaque valeur correspondant à $true
.
PS> 1,2,3,4 -eq 3
3
Cette méthode fonctionne toujours correctement dans une instruction if
. 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
}
Mais cette méthode cache un petit piège que je tiens à signaler. Lorsque vous utilisez l’opérateur -ne
de cette manière, il est facile d’appliquer par erreur la logique de manière inversée. L’utilisation de -ne
avec un ensemble d’opérateurs retourne $true
si un élément de l’ensemble ne correspond pas à votre valeur.
PS> 1,2,3 -ne 4
1
2
3
Cela peut sembler astucieux, mais nous disposons des opérateurs -contains
et -in
encore plus efficaces. Et l’opérateur -notcontains
répond exactement à vos besoins.
-contains
L’opérateur -contains
recherche votre valeur dans l’ensemble. Dès qu’il trouve une correspondance, il retourne $true
.
$array = 1..6
if ( $array -contains 3 )
{
# do something
}
Il s’agit de la méthode recommandée pour déterminer si un ensemble contient votre valeur. L’utilisation de Where-Object
(ou -eq
) parcourt chaque fois la liste entière mais ce processus est beaucoup plus lent.
Variantes :
-contains
correspondance, sans respect de la casse-icontains
correspondance, sans respect de la casse-ccontains
correspondance, avec respect de la casse-notcontains
sans correspondance, sans respect de la casse-inotcontains
sans correspondance, sans respect de la casse-cnotcontains
sans correspondance, avec respect de la casse
-in
L’opérateur -in
est similaire à l’opérateur -contains
, sauf que l’ensemble se trouve sur le côté droit.
$array = 1..6
if ( 3 -in $array )
{
# do something
}
Variantes :
-in
correspondance, sans respect de la casse-iin
correspondance, sans respect de la casse-cin
correspondance, avec respect de la casse-notin
sans correspondance, sans respect de la casse-inotin
sans correspondance, sans respect de la casse-cnotin
sans correspondance, avec respect de la casse
Opérateurs logiques
Les opérateurs logiques sont utilisés pour inverser ou combiner d’autres expressions.
-not
L’opérateur -not
retourne une expression de $false
à $true
ou de $true
à $false
. Voici un exemple dans lequel effectuer une action lorsque Test-Path
est $false
.
if ( -not ( Test-Path -Path $path ) )
La plupart des opérateurs dont nous avons parlé proposent une variante dans laquelle vous n’avez pas besoin d’utiliser l’opérateur -not
. Mais cet opérateur est parfois utile.
! operator
Vous pouvez utiliser !
comme alias pour -not
.
if ( -not $value ){}
if ( !$value ){}
Peut-être avez-vous remarqué que l’opérateur !
était davantage utilisé par les personnes qui maîtrisent d’autres langages, comme C# . Je préfère le saisir car j’ai parfois du mal à le repérer quand j’examine rapidement mes scripts.
-and
Vous pouvez combiner des expressions avec l’opérateur -and
. Dans ce cas, 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 supérieur ou égal à 13 pour le côté gauche, et inférieur à 55 pour le côté droit. J’ai ajouté d’autres parenthèses pour le rendre plus clair dans cet exemple, mais elles sont facultatives tant que l’expression est simple. Voici le même exemple sans parenthèses.
if ( $age -gt 13 -and $age -lt 55 )
L’évaluation se produit de gauche à droite. Si le premier élément a la valeur $false
, il s’arrête prématurément et n’effectue pas la comparaison appropriée. Cela est pratique lorsque vous devez vérifier qu’une valeur existe avant de l’utiliser. Par exemple, Test-Path
génère une erreur si vous lui attribuez un chemin d’accès $null
.
if ( $null -ne $path -and (Test-Path -Path $path) )
-or
L’opérateur -or
vous permet de spécifier deux expressions, et retourne $true
si l’une d’elles est $true
.
if ( $age -le 13 -or $age -ge 55 )
Comme avec l’opérateur -and
, l’évaluation se produit de gauche à droite. Hormis le fait que si la première partie est $true
, l’instruction entière est $true
et elle ignore le reste de l’expression.
Notez également le fonctionnement de la syntaxe pour ces opérateurs. Vous avez besoin de deux expressions distinctes. Certains utilisateurs essaient d’effectuer une opération semblable à celle-ci $value -eq 5 -or 6
, sans se rendre compte de leur erreur.
-xor or exclusif
Cet opérateur est un peu particulier. -xor
permet à une seule expression de renvoyer la valeur $true
. Par conséquent, si les deux éléments sont $false
ou $true
, l’expression entière est $false
. Cela revient à affirmer que cette expression est uniquement $true
lorsque les résultats de l’expression sont différents.
Il est très peu probable qu’une personne utilise cet opérateur logique, et je ne vois aucun exemple où il pourrait être utile.
Opérateurs de bits
Les opérateurs de bits effectuent des calculs sur les bits dans les valeurs et génèrent une nouvelle valeur comme résultat. L’enseignement des opérateurs au niveau du bit dépasse le cadre de cet article, mais en voici la liste.
-band
binaire AND-bor
binaire OR-bxor
binaire OR exclusif-bnot
binaire NOT-shl
décalage vers la gauche-shr
décalage vers la droite
Expressions PowerShell
Nous pouvons utiliser PowerShell normalement dans l’instruction de condition.
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* )
L’expression renvoie la valeur $true
s’il existe un processus retourné, et $false
dans le cas contraire. Vous pouvez tout à fait 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 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) )
Recherche de $null
Si vous n’obtenez aucun résultat ou une valeur $null
, la valeur $false
s’affiche dans l’instruction if
. Lorsqu’il s’agit de vérifier spécifiquement $null
, il est recommandé de placer $null
sur le côté gauche.
if ( $null -eq $value )
Il existe quelques nuances lorsque vous utilisez des valeurs $null
dans PowerShell. Si vous souhaitez approfondir vos connaissances, j’ai préparé un article intitulé Tout ce que vous avez toujours voulu savoir sur $null.
Attribution de variable dans la condition
J’allais oublier d’ajouter cet opérateur jusqu’à ce que Prasoon Karunan V me le rappelle.
if ($process=Get-Process notepad -ErrorAction ignore) {$process} else {$false}
Normalement, lorsque vous attribuez une valeur à une variable, la valeur n’est pas transmise au pipeline ni à la console. Lorsque vous attribuez une variable dans une sous-expression, elle est transmise au pipeline.
PS> $first = 1
PS> ($second = 2)
2
Vous remarquez que l’attribution de $first
n’a pas de sortie, contrairement à l’attribution de $second
? Lorsqu’une attribution est effectuée dans une instruction if
, elle s’exécute de la même manière que l’attribution $second
ci-dessus. Voici un exemple d’utilisation assez clair :
if ( $process = Get-Process Notepad* )
{
$process | Stop-Process
}
Si une valeur est attribuée à $process
, l’instruction est $true
et $process
s’arrête.
Veillez à ne pas confondre cela avec -eq
, car il ne s’agit pas d’une vérification d’égalité. Il s’agit d’une fonctionnalité plus complexe dont la plupart des utilisateurs ignorent le processus.
Attribution de variable à partir du scriptblock
Vous pouvez également utiliser le scriptblock de l’instruction if
pour attribuer 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, dans la sortie. Nous pouvons attribuer le résultat de l’instruction if
à la variable $discount
. Cet exemple peut simplement attribuer ces valeurs à la variable $discount
directement dans chaque élément scriptblock. Je ne dis pas que je l’utilise souvent avec l’instruction if
, mais je me rappelle l’avoir fait récemment.
Autre chemin d'accès d'exécution
L’instruction if
vous permet de spécifier une action non seulement lorsque l’instruction est $true
, mais également quand elle est $false
. C’est ici qu’intervient l’instruction else
.
else
L’instruction else
constitue 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 la valeur $path
pour s’assurer qu’il s’agit d’un fichier. Si nous trouvons le fichier, nous le déplaçons. Sinon, nous créons un avertissement. Ce type de logique de création de branche est très courant.
if imbriqué
Les instructions if
et else
prennent un bloc de script, ce qui nous permet de placer n’importe quelle commande PowerShell à l’intérieur de celles-ci, y compris une autre instruction if
. Vous pouvez ainsi utiliser une logique bien 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 bon chemin d’accès puis nous y effectuons une action. En cas d’échec, nous procédons à une autre vérification et fournissons des informations plus détaillées à l’utilisateur.
elseif
Nous ne sommes pas limités à une seule vérification conditionnelle. Nous pouvons chaîner des instructions if
et else
au lieu de les imbriquer à l’aide de 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 s’effectue de haut en bas. L’instruction if
en haut de la liste est évaluée en premier. Si la valeur est $false
, l’instruction descend jusqu’au prochain élément elseif
ou else
dans la liste. Le dernier élément else
est l’action par défaut à effectuer si aucune des autres ne retourne $true
.
commutateur
À ce stade, il est important de mentionner l’instruction switch
. Cette instruction fournit une autre syntaxe permettant d’effectuer plusieurs comparaisons avec une valeur. Avec l’instruction 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é. Prenons cet exemple :
$itemType = 'Role'
switch ( $itemType )
{
'Component'
{
'is a component'
}
'Role'
{
'is a role'
}
'Location'
{
'is a location'
}
}
trois valeurs possibles peuvent correspondre à $itemType
. Dans ce cas, la valeur correspond à Role
. J’ai utilisé un exemple simple pour vous présenter l’opérateur switch
. J’aborderai plus en détail le thème Tout ce que vous avez toujours voulu savoir sur l’instruction switch dans un autre article.
Tableau en ligne
Voici une fonction appelée Invoke-SnowSql qui lance un exécutable avec plusieurs arguments de ligne de commande. Voici un clip dans lequel j’utilise cette fonction pour créer 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.
Je les évalue en ligne dans l’initialisation de mon tableau. Si $Debug
a la valeur true, ces valeurs sont placées dans $snowSqlParam
, à l’emplacement approprié. Il en va de même pour la variable $Path
.
Simplifier les opérations complexes
Vous vous retrouverez inévitablement dans une situation où votre instruction If
déborde sur le côté droit de l’écran en raison d’un trop grand nombre de comparaisons à vérifier.
$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
}
Ces comparaisons peuvent être difficiles à lire et ainsi augmenter le risque d’erreur. Nous pouvons y remédier de plusieurs façons.
Continuation de ligne
Dans PowerShell, certains opérateurs vous permettent de prolonger la commande à la ligne suivante. Les opérateurs logiques -and
et -or
constituent de bons opérateurs si vous souhaitez fractionner votre expression sur plusieurs lignes.
if ($null -ne $user -and
$user.Department -eq 'Finance' -and
$user.Title -match 'Senior' -and
$user.HomeDrive -notlike '\\server\*'
)
{
# Do Something
}
Beaucoup d’éléments interviennent ici, mais placer chaque morceau sur sa propre ligne améliore grandement le processus. Je l’utilise généralement lorsque j’obtiens plus de deux comparaisons ou quand je dois faire défiler l’écran vers la droite pour lire une logique.
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
}
Cette méthode se révèle plus efficace que celle utilisée dans l’exemple précédent. Vous avez également la possibilité d’utiliser un nom de variable qui explique ce que vous êtes en train de vérifier. Il s’agit également d’un exemple de code autodocumenté qui consigne les commentaires inutiles.
Instructions if multiples
Nous pouvons la décomposer en plusieurs instructions 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
}
Je n’ai pas eu à inverser la logique pour que la logique de l’indicateur fonctionne correctement. Chaque évaluation représente une instruction if
individuelle. L’avantage de cette approche est que lorsque vous effectuez un débogage, vous pouvez déterminer exactement ce que fait la logique. Parallèlement, j’ai pu ajouter des commentaires bien plus pertinents.
L’inconvénient, c’est qu’il faut évidemment écrire bien plus de code. Le code est plus complexe à examiner lorsqu’il prend une seule ligne de logique et l’éclate en 25 lignes ou plus.
Utilisation des fonctions
Nous pouvons également déplacer toute cette logique de validation dans une fonction. Remarquez à quel point cette logique est simple.
if ( Test-SecureDriveConfiguration -ADUser $user )
{
# do something
}
Vous devrez toujours créer la fonction pour effectuer la validation, mais ce code est beaucoup plus facile à utiliser. Cela facilite le test de ce code. Dans vos tests, vous pouvez simuler l’appel à Test-ADDriveConfiguration
, et deux tests suffisent pour cette fonction : un test qui retourne $true
et un autre qui retourne $false
. Le test de l’autre fonction est plus simple car le code est vraiment court.
Nous pouvons toujours commencer par le corps de cette fonction, avec une seule ligne, ou opter pour la logique éclatée que nous avons utilisée dans la dernière section. Cela fonctionne bien dans les deux scénarios et vous pouvez ainsi modifier facilement cette implémentation ultérieurement.
Gestion des erreurs
Une utilisation importante 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 d’essayer de le créer.
if ( -not (Test-Path -Path $folder) )
{
New-Item -Type Directory -Path $folder
}
Je tiens à souligner que si vous attendez une exception, il ne s’agit pas alors vraiment d’une exception. Vérifiez vos valeurs et validez vos conditions lorsque vous le pouvez.
Si vous souhaitez approfondir un peu plus la gestion des exceptions, j’ai préparé un article intitulé Tout ce que vous avez toujours voulu savoir sur les exceptions.
Conclusion
L’instruction if
est une instruction simple, mais elle constitue un élément fondamental de PowerShell. Vous vous en servirez plusieurs fois dans presque tous les scripts que vous écrirez. J’espère que vous avez désormais une meilleure compréhension de ces concepts.