Recherche…


Introduction

Les variables sont utilisées pour stocker des valeurs. Soit la valeur de n'importe quel type, nous devons la stocker quelque part afin de pouvoir l'utiliser dans toute la console / le script. Les noms de variable dans PowerShell commencent par $ , comme dans $ Variable1 , et les valeurs sont affectées avec = , comme $ Variable1 = "Value 1" .PowerShell prend en charge un grand nombre de types de variables; comme les chaînes de texte, les entiers, les décimales, les tableaux et même les types avancés tels que les numéros de version ou les adresses IP.

Variable simple

Toutes les variables dans Powershell commencent par un signe dollar américain ( $ ). L'exemple le plus simple est le suivant:

$foo = "bar"

Cette instruction alloue une variable appelée foo avec une valeur de chaîne de "bar".

Supprimer une variable

Pour supprimer une variable de la mémoire, vous pouvez utiliser l'applet de commande Remove-Item . Note: Le nom de la variable n'inclut pas le $ .

Remove-Item Variable:\foo

Variable a un fournisseur pour permettre à la plupart des applets de commande * -item de fonctionner comme les systèmes de fichiers.

Une autre méthode pour supprimer une variable consiste à utiliser l'applet de commande Remove-Variable et son alias rv

$var = "Some Variable" #Define variable 'var' containing the string 'Some Variable'
$var #For test and show string 'Some Variable' on the console

Remove-Variable -Name var
$var 

#also can use alias 'rv'
rv var

Portée

La portée par défaut d'une variable est le conteneur englobant. En dehors d'un script ou d'un autre conteneur, la portée est Global . Pour spécifier une étendue , elle est préfixée par le nom de la variable $scope:varname comme ceci:

$foo = "Global Scope"
function myFunc {
    $foo = "Function (local) scope"
    Write-Host $global:foo
    Write-Host $local:foo
    Write-Host $foo
}
myFunc
Write-Host $local:foo
Write-Host $foo

Sortie:

    Global Scope
    Function (local) scope
    Function (local) scope
    Global Scope
    Global Scope

Lecture d'une sortie CmdLet

Par défaut, powershell renverrait la sortie à l'entité appelante. Considérez l'exemple ci-dessous,

Get-Process -Name excel   

Cela renverrait simplement à l'entité appelante le processus en cours d'exécution qui correspond au nom Excel. Dans ce cas, l'hôte PowerShell. Il imprime quelque chose comme,

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1037      54    67632      62544   617     5.23   4544   1 EXCEL 

Maintenant, si vous affectez la sortie à une variable, elle n'imprimera tout simplement rien. Et bien sûr, la variable contient la sortie. (Que ce soit une chaîne, Object - N'importe quel type d'ailleurs)

$allExcel = Get-Process -Name excel

Donc, disons que vous avez un scénario où vous voulez assigner une variable par un nom dynamique, vous pouvez utiliser le paramètre -OutVariable

Get-Process -Name excel -OutVariable AllRunningExcel

Notez que le "$" est manquant ici. Une différence majeure entre ces deux affectations est que, il imprime également la sortie en dehors de l'affecter à la variable AllRunningExcel. Vous pouvez également choisir de l'assigner à une autre variable.

$VarOne = Get-Process -Name excel -OutVariable VarTwo

Bien que le scénario ci-dessus soit très rare, les deux variables $ VarOne & $ VarTwo auront la même valeur.

Maintenant considérez ceci,

Get-Process -Name EXCEL -OutVariable MSOFFICE
Get-Process -Name WINWORD -OutVariable +MSOFFICE

La première instruction obtiendrait simplement un processus Excel et l'assignerait à la variable MSOFFICE, et ensuite, les processus de mot ms seraient exécutés et "Ajouter" à la valeur existante de MSOFFICE. Cela ressemblerait à quelque chose comme ça,

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1047      54    67720      64448   618     5.70   4544   1 EXCEL                                                                                                                           
   1172      70    50052      81780   584     1.83  14968   1 WINWORD     

Affectation de liste de variables multiples

Powershell permet d'affecter plusieurs variables et traite presque tout comme un tableau ou une liste. Cela signifie qu'au lieu de faire quelque chose comme ça:

$input = "foo.bar.baz"
$parts = $input.Split(".")
$foo = $parts[0]
$bar = $parts[1]
$baz = $parts[2]

Vous pouvez simplement faire ceci:

$foo, $bar, $baz = $input.Split(".")

Étant donné que Powershell traite les affectations de cette manière comme des listes, si la liste contient plus de valeurs que les éléments de votre liste de variables, la dernière variable devient un tableau des valeurs restantes. Cela signifie que vous pouvez aussi faire des choses comme ceci:

$foo, $leftover = $input.Split(".") #Sets $foo = "foo", $leftover = ["bar","baz"]
$bar = $leftover[0] # $bar = "bar"
$baz = $leftover[1] # $baz = "baz"

Tableaux

La déclaration de tableau dans Powershell est presque identique à l'instanciation de toute autre variable, c'est-à-dire que vous utilisez une syntaxe $name = . Les éléments du tableau sont déclarés en les séparant par des virgules ( , ):

$myArrayOfInts = 1,2,3,4
$myArrayOfStrings = "1","2","3","4"

Ajout à un arry

L'ajout à un tableau est aussi simple que l'utilisation de l'opérateur + :

$myArrayOfInts = $myArrayOfInts + 5
//now contains 1,2,3,4 & 5!

Combiner des tableaux ensemble

Encore une fois, c'est aussi simple que d'utiliser l'opérateur +

$myArrayOfInts = 1,2,3,4
$myOtherArrayOfInts = 5,6,7
$myArrayOfInts = $myArrayOfInts + $myOtherArrayOfInts
//now 1,2,3,4,5,6,7


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow