PowerShell
Variables dans PowerShell
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