Dans l’article précédent, intitulé « Didacticiel de création de scripts Windows Powershell pour débutants », nous avons exploré l’utilisation de la console PowerShell pour exécuter des scripts, et appris ce qu’étaient les cmdlets, comment obtenir leurs propriétés et comment utiliser les canaux pour passer des données d’un cmdlet à un autre. Dans le présent article, nous allons aborder les variables et les tableaux, en précisant ce qu’ils sont et comment nous pouvons les créer, les supprimer et les modifier.
Variables PowerShell
Une variable est une unité de mémoire dans laquelle sont stockées des valeurs. Dans PowerShell, une variable commence par le signe dollar « $ » et son nom peut contenir des lettres, des chiffres et des tirets. Pour attribuer une valeur à une variable, on utilise l’opérateur égale « = ». Pour afficher la valeur d’une variable, il suffit de saisir la variable. Les commandes suivantes attribuent une valeur à une variable, puis la vérifient :
$var1 = 777 $var1
Vous pouvez effectuer des opérations arithmétiques avec des nombres :
$var1 = 777 $var2 = 333 $var3 = $var1 + $var2 $var3
Vous pouvez également combiner des chaînes de caractères à l’aide de l’opérateur plus « + » :
$var1 = "Complete" $var2 = "Visibility" $var3 = $var1 + $var2 $var3
Si vous ajoutez un nombre à une chaîne, ce nombre devient automatiquement une chaîne :
$var1 = "Netwrix" $var2 = 2018 $var3 = $var1 + $var2 $var3
Types de variables
Le type de variable PowerShell est défini automatiquement d’après la valeur que vous lui attribuez, mais vous pouvez également le définir manuellement :
[string]$var1 = "Netwrix"
Pour connaître le type d’une variable, on utilise le paramètre « GetType () » :
$var1 = "Netwrix" $var1.GetType().FullName
Comme nous pouvons le voir, notre variable $var1 est du type « System.String ».
Voici les descriptions de tous les types de variables PowerShell :
Type de variable | Description | Exemple |
---|---|---|
[string] System.String | Chaîne de texte | $var1 = "Netwrix" |
[char] System.Char | Symbole | [char]$var1 = 0x265b |
[bool] System.Boolean | Booléen (la valeur peut être $true ou $false) | $var1 = $true |
[int] System.Int32 | Nombre entier 32 bits | $var2 = 235235345 |
[long] System.Int64 | Nombre entier 64 bits | $var2 = 2352353457 |
[decimal] System.Decimal | Nombre décimal 128 bits avec la lettre « d » à la fin | $var2 = 23523.53456d |
[double] System.Double | Nombre décimal à virgule flottante de 8 octets | [double]$var2 = 23523.53456 |
[single] System.Single | Nombre décimal à virgule flottante de 32 bits | [single]$var2 = 23523.53 |
[DateTime] System.DateTime | Date et heure | $var3 = get-date |
[array] System.Object[] | Tableau (décrit en détail plus loin dans l’article) | $var3 = "premier", "deuxième", "troisième" |
[hashtable] System.Collections.Hashtable | Table de hachage La différence entre les tables de hachage et les tableaux est que des index sont utilisés dans les tableaux, et des clés nommées sont utilisées dans les tables de hachage. Les tables de hachage sont construites selon le format suivant : @ {key = "value"} Pour ajouter un élément à une table de hachage, vous pouvez soit lui affecter une clé non existante, soit utiliser la méthode Add (). Si une clé existante reçoit une attribution, la valeur de la clé devient celle qui lui est attribuée. Pour supprimer un élément d’une table de hachage, utilisez la méthode Remove (). | $var3 = @{1="un"; 2="deux"; 3="trois"} $var3.Add("4", "quatre") $var3.5 = "cinq" $var3.Remove("2") |
Vous avez probablement déjà compris que vous n’étiez pas limité à attribuer une valeur définie à une variable et remarqué la classe « System.Object [] » dans le tableau. Vous pouvez attribuer à cette variable le résultat de n’importe quel cmdlet.
Portée d’une variable
La portée d’une variable dans PowerShell peut être locale ou globale. Par défaut, une variable a une portée locale. Une variable est limitée par sa portée courante ; par exemple, une variable locale peut être disponible dans une fonction courante ou un script courant, tandis qu’une variable globale est active pendant toute la session PowerShell courante. Pour indiquer une variable globale, utilisez le format « $Global: variable = valeur », comme illustré dans la commande suivante :
$Global:var4 = 12
Exemples de variables PowerShell
Établir la liste des variables
Pour établir la liste des variables couramment disponibles, exécutez la commande « ls variable:* ». Voici un exemple du résultat :
Définir une variable
Vous pouvez créer une variable simplement en lui attribuant une valeur. Par exemple, la commande « $var4 = “exempledevariable” » crée une variable nommée $var4 et lui affecte une valeur de chaîne. Les guillemets doubles (” “) indiquent qu’une valeur de chaîne est attribuée à la variable.
Afficher les variables
Cette commande est très similaire à celle qui établit la liste des variables, elle utilise simplement un autre cmdlet :
Get-Variable | Out-String
Imprimer une variable
Vous pouvez enregistrer une variable au format .txt, .csv ou HTML.
Pour l’enregistrer dans un fichier .txt, utilisez la commande Out-File :
$var5 = "Hello World!" $var5 | Out-File C:\scripts\Hello_World.txt
Pour exporter les données vers un fichier.csv, utilisez la commande Export-Csv :
$var6 = Get-Process $var6 | SELECT Name, Path | Export-Csv -Path C:\scripts\processes.csv
Pour enregistrer une variable dans un fichier HTML, utilisez la commande ConvertTo-Html :
$var6 = Get-Process $var6 | ConvertTo-Html -Property Name, Path > C:\scripts\processes.html
Pour lire un fichier que vous avez exporté, utilisez le cmdlet Get-Content :
Get-Content C:\scripts\processes.csv
Effacer une variable
Pour effacer le contenu d’une variable, utilisez le cmdlet Clear-Variable :
Clear-Variable -name var6 #without $
Supprimer une variable
Pour supprimer complètement une variable, utilisez le cmdlet Remove-Variable :
Remove-Variable -name var6 #without $
Tableaux PowerShell
Un tableau est un type de variable. C’est un ensemble de composants (les éléments du tableau) disposés dans un certain ordre. Les éléments du tableau sont numérotés de manière séquentielle, et on peut accéder à un élément en utilisant son numéro d’index.
Lorsque vous créez des tableaux, prenez en compte le comportement par défaut de PowerShell. Si vous créez un tableau avec plusieurs éléments, PowerShell créera un tableau, tel que vous le souhaitez. Placez par exemple quelques nombres dans un tableau, puis vérifiez le type de données de la variable :
$array1 = 1, 2, 3 $array1.GetType()
Comme vous pouvez le constater, PowerShell a créé un tableau (System.Array).
Mais si vous mettez seulement une valeur dans une variable, PowerShell ne créera pas un tableau :
$array1 = 1 $array1.GetType()
Vous ne pouvez évidemment pas toujours savoir à l’avance combien d’objets seront obtenus suite à l’exécution d’une commande particulière, il vous faut donc un code qui traite toujours le résultat comme un tableau.
Vous pouvez faire cela de plusieurs manières. Par exemple, vous pouvez utiliser l’opérateur virgule « , ». Si vous utilisez une virgule comme opérateur binaire, un tableau normal sera créé ; si vous l’utilisez comme opérateur unaire, le tableau ne comportera qu’un seul élément. Voici un moyen d’obtenir un tableau composé d’un seul élément :
$array1 = ,1 $array1.GetType()
Vous pouvez tout aussi bien spécifier explicitement le type de données d’une variable :
[object[]]$array1 = 1 $array1.GetType()
Enfin, vous pouvez créer un tableau en utilisant l’opérateur de sous-expression « @ », qui crée un tableau même si aucun objet n’a été spécifié. Il est très pratique d’initialiser une variable sous forme de tableau, puis d’y ajouter des objets sans se soucier de leur nombre.
$array3 = @() $array3.GetType()
Remarquez que chaque élément d’un tableau a son propre type de données, et l’objet type [] vous permet d’ajouter n’importe quelles valeurs au tableau. Si nécessaire, vous pouvez restreindre les membres du tableau à un type de données spécifique – vous créez alors un « tableau typé ». Vous pouvez par exemple spécifier que les éléments du tableau soient des valeurs entières :
[int32[]]$array1 = 1 $array1.GetType()
Définissons les processus système comme des membres d’un tableau :
[System.Diagnostics.Process[]]$array1 = Get-Process $array1.GetType()
Liste de tableau
Si vous devez modifier un tableau ou y faire des recherches fréquemment, vous pouvez utiliser la classe ArrayList, qui est conçue pour ajouter, supprimer et rechercher facilement des éléments :
$array3 = New-Object System.Collections.ArrayList
Index de tableau
Un index de tableau est une valeur, généralement un entier numérique servant à identifier et à référencer un élément du tableau. Les index de tableau commencent à zéro ou à un, selon le langage de programmation.
Les tableaux PowerShell ont pour base zéro, donc pour faire référence au premier élément du tableau $var3 (« élément zéro »), vous écrirez $var3[0].
$var3 = "first", "second", "third"
Tableaux multidimensionnels
Les tableaux multidimensionnels sont des variables qui servent à stocker des informations dans une table sans avoir à les écrire dans une base de données réelle. Ils ressemblent à une table de hachage, mais peuvent stocker différents types d’informations, par exemple des chaînes de caractères et des entiers. Vous pouvez vous représenter un tableau multidimensionnel comme une table dotée de colonnes et de lignes, où chaque cellule a son propre index dans un environnement PowerShell.
$mdarray1 = @() $mdarray1_counter ++ $mdarray1 += ,@($mdarray1_counter, 'Earth',12742) $mdarray1_counter ++ $mdarray1 += ,@($mdarray1_counter, 'Mars',6779) $mdarray1_counterr ++ $mdarray1 += ,@($mdarray1_counter, 'Venus',12104) $mdarray1_counter ++ $mdarray1 += ,@($mdarray1_counter, 'Saturn',116464) foreach($array10 in $mdarray1) { Write-host ($array10) }
Exemples de tableaux PowerShell
Trier un tableau
Si un tableau contient un seul type de données, vous pouvez trier ses valeurs à l’aide de la méthode Sort :
$array3 | Sort
Pour trier un tableau contenant plusieurs types de données, vous devez utiliser le cmdlet Sort-Object.
Ajout à un tableau
Commençons par créer un tableau :
$array5 = "one", "two", "three", "four", "five" $array5.gettype()
Pour modifier facilement notre tableau, nous devons l’ajouter à la liste des tableaux :
[System.Collections.ArrayList]$ArrayList1 = $array5 $ArrayList1.GetType()
Comme vous pouvez le voir, le type de base a changé et nous pouvons désormais modifier facilement notre tableau :
$ArrayList1.Add("six") $ArrayList1.Remove("three") $ArrayList1
Longueur d’un tableau
Pour obtenir le nombre d’éléments d’un tableau, utilisez le paramètre .length :
$array6 = 1,2,3,4,5,6 echo $array6.Length
Supprimer un élément d’un tableau
Pour supprimer un élément, utilisez la commande .Remove. Encore une fois, il est préférable d’utiliser une liste de tableaux :
[System.Collections.ArrayList]$ArrayList1 = $array5 $ArrayList1.GetType() $ArrayList1.Remove("three") $ArrayList1
Contenu d’un tableau
Si vous voulez savoir si l’un des éléments d’un tableau contient une valeur particulière, utilisez la méthode Contains :
$array7 = 1,2,5,8,3,4,5 $array7.Contains(2) $array7.Contains(12)
Effacer un tableau
Même si la plupart des opérations relatives aux tableaux sont relativement faciles à réaliser avec PowerShell, il n’existe pas de moyen facile de supprimer un tableau. La méthode la plus simple pour se débarrasser d’un tableau entier est de lui attribuer la variable $null :
$array7 = $null $array7
Pour vérifier que votre tableau est null, exécutez le script suivant :
$array7 -eq $null
Dans PowerShell, si une variable est null, vous ne pouvez lui appliquer aucune méthode.
Imprimer un tableau
Pour imprimer un tableau entier, vous pouvez utiliser les mêmes méthodes que celles décrites pour imprimer des variables.
Pour enregistrer un tableau dans un fichier .txt, utilisez la commande Out-File :
$var5 | Out-File C:\scripts\array.txt
Pour l’exporter vers un fichier.csv, utilisez la commande Export-Csv :
$var6 | Export-Csv -Path C:\scripts\array.csv
Pour l’enregistrer dans un fichier HTML, utilisez la commande ConvertTo-Html :
$var6 | ConvertTo-Html > C:\scripts\processes.html
Lire en boucle les éléments d’un tableau
Pour manipuler chaque élément d’un tableau l’un après l’autre, réalisez une boucle à l’aide de l’opérateur « foreach ». Si, par exemple, vous créez un tableau de chaînes de caractères et que vous voulez compter la longueur de chaque mot dans ce tableau, exécutez le script suivant :
$array8 = @("Earth","Mercury","Venus","Jupiter","Saturn","Mars", "Neptune", "Pluto") foreach ($array in $array8) { "$array = " + $array.length }
Cet article nous en a appris davantage sur les variables et leurs types. Nous avons ensuite examiné en détail un type de variable – le tableau – et appris à le manipuler. Ces connaissances vous préparent à explorer PowerShell plus en profondeur.