Variables et tableaux PowerShell

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

PowerShell Variables and Arrays assign a value

Vous pouvez effectuer des opérations arithmétiques avec des nombres :

$var1 = 777
$var2 = 333
$var3 = $var1 + $var2
$var3

PowerShell_Variables_Assign_Value_Numbers

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

PowerShell_Variables_Combine_Strings
Si vous ajoutez un nombre à une chaîne, ce nombre devient automatiquement une chaîne :

$var1 = "Netwrix"
$var2 = 2018
$var3 = $var1 + $var2
$var3

owerShell_Variables_Combine_Strings_Add_Plus

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"

PowerShell_Variables_Assign type
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 variableDescriptionExemple
[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 :

PowerShell_Variables_List

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

PowerShell_Variables_print

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()

PowerShell_Variables_One value

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()

PowerShell_Variables_Array_one element

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()

PowerShell_Variables_Create array

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()

PowerShell_Variables_Define systems processes as array members

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"

PowerShell__Array_Element zero

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)
    }

PowerShell_Multidimesional arrays

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()

PowerShell_Add to array

Pour modifier facilement notre tableau, nous devons l’ajouter à la liste des tableaux :

[System.Collections.ArrayList]$ArrayList1 = $array5
$ArrayList1.GetType()

PowerShell_Modify array

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

PowerShell_Modify array base type

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

PowerShell_Array 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

PowerShell_Remove item from array

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)

PowerShell__Array contains

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

PowerShell_Clear array

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
 }

PowerShell_Loop through an array

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.