À propos des opérateurs

Description courte

Décrit les opérateurs pris en charge par PowerShell.

Description longue

Un opérateur est un élément de langage que vous pouvez utiliser dans une commande ou une expression. PowerShell prend en charge plusieurs types d’opérateurs pour vous aider à manipuler des valeurs.

Opérateurs arithmétiques

Utilisez des opérateurs arithmétiques (+, , -, *, /%) pour calculer des valeurs dans une commande ou une expression. Avec ces opérateurs, vous pouvez ajouter, soustraire, multiplier ou diviser des valeurs et calculer le reste (module) d’une opération de division.

L’opérateur d’addition concatène des éléments. L’opérateur de multiplication retourne le nombre spécifié de copies de chaque élément. Vous pouvez utiliser des opérateurs arithmétiques sur n’importe quel type .NET qui les implémente, tels que : Int, , StringDateTime, , Hashtableet Tableaux.

Les opérateurs au niveau du bit (-band, , -bor, -bxor-bnot, , -shl-shr) manipulent les modèles de bits dans les valeurs.

Pour plus d’informations, consultez about_Arithmetic_Operators.

Opérateurs d'assignation

Utilisez des opérateurs d’affectation (=, , +=, -=*=, /=, %=) pour attribuer, modifier ou ajouter des valeurs à des variables. Vous pouvez combiner des opérateurs arithmétiques avec une affectation pour affecter le résultat de l’opération arithmétique à une variable.

Pour plus d’informations, consultez about_Assignment_Operators.

Opérateurs de comparaison

Utilisez des opérateurs de comparaison (-eq, , -ne, -gt-lt, -le, -ge) pour comparer des valeurs et des conditions de test. Par exemple, vous pouvez comparer deux valeurs de chaîne pour déterminer si elles sont égales.

Les opérateurs de comparaison incluent également des opérateurs qui recherchent ou remplacent des modèles dans du texte. Les opérateurs (-match, -notmatch, -replace) utilisent des expressions régulières et (-like, -notlike) utilisent des *caractères génériques .

Les opérateurs de comparaison de l’isolement déterminent si une valeur de test apparaît dans un jeu de références (-in, -notin, -contains, -notcontains).

Les opérateurs de comparaison de type (-is, -isnot) déterminent si un objet est d’un type donné.

Pour plus d’informations, consultez about_Comparison_Operators.

Opérateurs logiques

Utilisez des opérateurs logiques (-and, , -or, -xor-not, !) pour connecter des instructions conditionnelles à une seule condition complexe. Par exemple, vous pouvez utiliser un opérateur logique -and pour créer un filtre d’objet avec deux conditions différentes.

Pour plus d’informations, consultez about_Logical_Operators.

Opérateurs de redirection

Utilisez des opérateurs de redirection (>, , >>, 2>2>>et 2>&1) pour envoyer la sortie d’une commande ou d’une expression à un fichier texte. Les opérateurs de redirection fonctionnent comme l’applet Out-File de commande (sans paramètres), mais ils vous permettent également de rediriger la sortie d’erreur vers les fichiers spécifiés. Vous pouvez également utiliser l’applet de commande pour rediriger la Tee-Object sortie.

Pour plus d’informations, consultez about_Redirection

Opérateurs de fractionnement et de jointure

-join Les -split opérateurs divisent et combinent des sous-chaînes. L’opérateur -split fractionne une chaîne en sous-chaînes. L’opérateur -join concatène plusieurs chaînes en une seule chaîne.

Pour plus d’informations, consultez about_Split et about_Join.

Opérateurs de type

Utilisez les opérateurs de type (-is, -isnot, -as) pour rechercher ou modifier le type .NET Framework d’un objet.

Pour plus d’informations, consultez about_Type_Operators.

Opérateurs unaires

Utilisez des opérateurs unaires pour incrémenter ou décrémenter des variables ou des propriétés d’objet et définir des entiers sur des nombres positifs ou négatifs. Par exemple, pour incrémenter la variable à partir de 9 , vous tapez $a++.10$a

Opérateurs spéciaux

Les opérateurs spéciaux ont des cas d’usage spécifiques qui ne tiennent pas dans un autre groupe d’opérateurs. Par exemple, les opérateurs spéciaux vous permettent d’exécuter des commandes, de modifier le type de données d’une valeur ou de récupérer des éléments à partir d’un tableau.

Opérateur de regroupement ( )

Comme dans d’autres langages, (...) sert à remplacer la priorité des opérateurs dans les expressions. Par exemple : (1 + 2) / 3

Toutefois, dans PowerShell, il existe des comportements supplémentaires.

  • (...) vous permet de laisser la sortie d’une commande participer à une expression. Par exemple :

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • Lorsqu’il est utilisé comme premier segment d’un pipeline, l’habillage d’une commande ou d’une expression entre parenthèses entraîne invariablement l’énumération du résultat de l’expression. Si les parenthèses encapsulent une commande, elle est exécutée jusqu’à la fin avec toutes les sorties collectées en mémoire avant que les résultats ne soient envoyés via le pipeline.

Notes

L’habillage d’une commande entre parenthèses entraîne la définition de la variable $true$? automatique , même lorsque la commande placée elle-même est définie $?$falsesur . Par exemple, (Get-Item /Nosuch); $? produit de manière inattendue True. Pour plus d’informations sur $?, consultez about_Automatic_Variables.

Opérateur de sous-expression $( )

Retourne le résultat d’une ou plusieurs instructions. Pour un résultat unique, retourne une scalaire. Pour plusieurs résultats, retourne un tableau. Utilisez cette option lorsque vous souhaitez utiliser une expression dans une autre expression. Par exemple, pour incorporer les résultats de la commande dans une expression de chaîne.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

Opérateur de sous-expression de tableau @( )

Retourne le résultat d’une ou plusieurs instructions sous forme de tableau. S’il n’y a qu’un seul élément, le tableau n’a qu’un seul membre.

@(Get-CimInstance win32_logicalDisk)

Syntaxe littérale de table de hachage @{}

Comme pour la sous-expression de tableau, cette syntaxe est utilisée pour déclarer une table de hachage. Pour plus d’informations, consultez about_Hash_Tables.

Opérateur d’appel &

Exécute une commande, un script ou un bloc de script. L’opérateur d’appel, également appelé « opérateur d’appel », vous permet d’exécuter des commandes stockées dans des variables et représentées par des chaînes ou des blocs de script. L’opérateur d’appel s’exécute dans une étendue enfant. Pour plus d’informations sur les étendues, consultez about_Scopes.

Cet exemple stocke une commande dans une chaîne et l’exécute à l’aide de l’opérateur d’appel.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

L’opérateur d’appel n’analyse pas les chaînes. Cela signifie que vous ne pouvez pas utiliser de paramètres de commande dans une chaîne lorsque vous utilisez l’opérateur d’appel.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

L’applet de commande Invoke-Expression peut exécuter du code qui provoque des erreurs d’analyse lors de l’utilisation de l’opérateur d’appel.

PS> & "1+1"
& : The term '1+1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

Vous pouvez utiliser l’opérateur d’appel pour exécuter des scripts à l’aide de leurs noms de fichiers. L’exemple ci-dessous montre un nom de fichier de script qui contient des espaces. Lorsque vous essayez d’exécuter le script, PowerShell affiche à la place le contenu de la chaîne entre guillemets contenant le nom de fichier. L’opérateur d’appel vous permet d’exécuter le contenu de la chaîne contenant le nom de fichier.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

Pour plus d’informations sur les blocs de script, consultez about_Script_Blocks.

Opérateur d’arrière-plan &

Exécute le pipeline avant celui-ci en arrière-plan, dans un travail PowerShell. Cet opérateur agit de la même manière que l’opérateur de contrôle UNIX (&), qui exécute la commande avant qu’elle ne soit asynchrone en tant que travail.

Cet opérateur est fonctionnellement équivalent à Start-Job. L’exemple suivant illustre l’utilisation de base de l’opérateur de travail en arrière-plan.

Get-Process -Name pwsh &

Cette commande est fonctionnellement équivalente à l’utilisation suivante de Start-Job:

Start-Job -ScriptBlock {Get-Process -Name pwsh}

Tout comme Start-Job, l’opérateur d’arrière-plan & retourne un Job objet. Cet objet peut être utilisé avec Receive-Job et Remove-Job, comme si vous aviez utilisé Start-Job pour démarrer le travail.

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

L’opérateur & d’arrière-plan est également un terminateur d’instruction, tout comme l’opérateur de contrôle UNIX ampersand (&). Cela vous permet d’appeler des commandes supplémentaires après l’opérateur d’arrière-plan & . L’exemple suivant illustre l’appel de commandes supplémentaires après l’opérateur d’arrière-plan & .

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Cela équivaut au script suivant :

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

Si vous souhaitez exécuter plusieurs commandes, chacune dans son propre processus en arrière-plan, mais toutes sur une seule ligne, placez & simplement entre et après chacune des commandes.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

Pour plus d’informations sur les travaux PowerShell, consultez about_Jobs.

Opérateur cast [ ]

Convertit ou limite les objets au type spécifié. Si les objets ne peuvent pas être convertis, PowerShell génère une erreur.

[DateTime]"2/20/88" - [DateTime]"1/20/88"
[Int] (7/2)
[String] 1 + 0
[Int] '1' + 0

Un cast peut également être effectué lorsqu’une variable est affectée à l’aide de la notation de cast.

Opérateur virgule ,

En tant qu’opérateur binaire, la virgule crée un tableau ou ajoute au tableau en cours de création. En mode expression, en tant qu’opérateur unaire, la virgule crée un tableau avec un seul membre. Placez la virgule avant le membre.

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Étant donné que Write-Object vous attendez un argument, vous devez placer l’expression entre parenthèses.

Opérateur d’approvisionnement par points .

Exécute un script dans l’étendue actuelle afin que toutes les fonctions, alias et variables créées par le script soient ajoutées à l’étendue actuelle, en remplaçant les fonctions existantes. Les paramètres déclarés par le script deviennent des variables. Les paramètres pour lesquels aucune valeur n’a été donnée deviennent des variables sans valeur. Toutefois, la variable $args automatique est conservée.

. c:\scripts\sample.ps1 1 2 -Also:3

Notes

L’opérateur d’approvisionnement par points est suivi d’un espace. Utilisez l’espace pour distinguer le point du symbole point (.) qui représente le répertoire actif.

Dans l’exemple suivant, le script Sample.ps1 dans le répertoire actif est exécuté dans l’étendue actuelle.

. .\sample.ps1

Opérateur de format -f

Met en forme des chaînes à l’aide de la méthode de format des objets de chaîne. Entrez la chaîne de format sur le côté gauche de l’opérateur et les objets à mettre en forme sur le côté droit de l’opérateur.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

Si vous devez conserver les accolades ({}) dans la chaîne mise en forme, vous pouvez les échapper en doublant les accolades.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

Pour plus d’informations, consultez la méthode String.Format et la mise en forme composite.

Opérateur d’index [ ]

Sélectionne des objets dans des collections indexées, telles que des tableaux et des tables de hachage. Les index de tableau sont de base zéro, de sorte que le premier objet est indexé en tant que [0]. Pour les tableaux (uniquement), vous pouvez également utiliser des index négatifs pour obtenir les dernières valeurs. Les tables de hachage sont indexées par valeur de clé.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

Opérateur de pipeline |

Envoie (« pipes ») la sortie de la commande qui l’précède à la commande qui la suit. Lorsque la sortie inclut plusieurs objets (une « collection »), l’opérateur de pipeline envoie les objets un par un.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

Opérateur de plage ..

Représente les entiers séquentiels dans un tableau d’entiers, en fonction d’une limite supérieure et inférieure.

1..10
foreach ($a in 1..$max) {Write-Host $a}

Vous pouvez également créer des plages dans l’ordre inverse.

10..1
5..-5 | ForEach-Object {Write-Output $_}

À compter de PowerShell 6, l’opérateur de plage fonctionne avec les caractères ainsi que les entiers.

Pour créer une plage de caractères, placez les caractères de limite entre guillemets.

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

Opérateur d’accès aux membres .

Accède aux propriétés et méthodes d’un objet. Le nom du membre peut être une expression.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

Opérateur membre statique ::

Appelle les propriétés et méthodes statiques d’une classe .NET Framework. Pour rechercher les propriétés et méthodes statiques d’un objet, utilisez le paramètre statique de l’applet Get-Member de commande. Le nom du membre peut être une expression.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

Voir aussi

about_Arithmetic_Operators

about_Assignment_Operators

about_Comparison_Operators

about_Logical_Operators

about_Operator_Precedence

about_Type_Operators

about_Split

about_Join

about_Redirection