Introduction
Un tableau est une structure de données qui peut être composée d’une ou plusieurs valeurs simultanément. On peut le comparer à une collection ou une liste d’éléments du même type ou de type différent. De nombreux langages de script ou de programmation utilisent les tableaux, notamment Windows PowerShell.
Examinons en détail la création et l’utilisation d’un tableau dans PowerShell.
Créer un tableau d’objets
Par défaut, chaque élément d’un tableau est un objet plutôt qu’un autre type de données, par exemple une chaîne ou un nombre entier. L’exemple ci-dessous montre comment créer un tableau d’objets en ajoutant des objets :
$people = @( [PSCustomObject]@{Name='Alice'; Age=30}, [PSCustomObject]@{Name='Bob'; Age=25}
Créer un tableau composé d’un élément unique
Si votre variable ne comprend qu’une seule valeur, PowerShell ne créera pas de tableau. Pour en avoir confirmation, utilisons deux scripts et comparons le résultat des types de données.
Créons d’abord un tableau dans PowerShell comprenant cinq éléments :
$array = @(1, 2, 3, 4, 5) $array1.GetType()
Essayons maintenant d’utiliser un script semblable pour la création d’un tableau comprenant un élément unique :
$array1 = 1 $array1.GetType()
Comme vous pouvez l’observer ci-dessous, PowerShell a créé un tableau (System.Array) dans le premier cas, mais pas dans le second.
Ce comportement se révèle particulièrement problématique si vous souhaitez créer un tableau en récupérant des objets à l’aide d’une commande précise puisque vous ne connaissez pas à l’avance le nombre d’objets que vous obtiendrez dans les résultats.
Pour contourner ce problème, vous pouvez utiliser l’opérateur , (virgule). Utilisée comme opérateur binaire, la virgule permet de créer un tableau normal. Si elle est utilisée comme opérateur unaire, le tableau ne comporte qu’un élément unique.
Par exemple, voici comment obtenir un tableau composé d’un élément unique :
$array1 = ,1 $array1.GetType()
Le résultat ci-dessous confirme la création du tableau :
Créer un tableau vide
PowerShell vous permet aussi, en utilisant l’opérateur @, de créer un tableau, même vide. Vous obtenez par exemple un tableau sans aucun objet en saisissant @(). Il s’agit d’une méthode pratique pour initialiser des variables sous la forme de tableaux, et leur ajouter plus tard des objets sans se soucier de leur nombre.
$array3 = @() $array3.GetType()
Créer un tableau typé
Par défaut, les éléments d’un tableau acceptent différents types de données. Vous pouvez néanmoins créer des tableaux qui n’acceptent qu’un type de données spécifique. Si vous ajoutez une valeur qui n’est pas prise en charge, une erreur s’affichera. Les exemples ci-dessous montrent comment créer les tableaux typés les plus courants :
Nombre entier :
[int[]]$intArray = 1, 2, 3
Chaîne :
[string[]]$strArray = "one", "two", "three"
Date/Heure :
[datetime[]]$dateArray = (Get-Date), (Get-Date).AddDays(1)
Créer un tableau multidimensionnel (une matrice)
Vous pouvez créer un tableau imbriqué en utilisant des virgules et créer une disposition structurée de données en lignes ou en colonnes. Voici par exemple une matrice de 3 x 3 :
$twoDArray = @( @(1, 2, 3), @(4, 5, 6), @(7, 8, 9) )
Comparer, grouper, sélectionner et trier des tableaux
On peut également mentionner d’autres cmdlets (applets de commande) PowerShell utiles lorsque vous travaillez avec des tableaux :
- Compare-Object — Cet applet de commande compare deux tableaux et montre les différences.
- Group-Object — Permet de grouper les objets d’un tableau en fonction de la valeur d’une propriété spécifiée.
- Select-Object — Cet applet sélectionne les propriétés spécifiées d’un objet ou d’un ensemble d’objets, et peut également sélectionner un nombre spécifié d’éléments dans un tableau.
- Sort-Object — Permet de trier des tableaux qui ne contiennent qu’un seul type de données, comme dans l’exemple ci-dessous :
$array = @(3, 1, 4, 2) $sortedArray = $array | Sort-Object
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 }
Voici le résultat ci-dessous :
Utiliser un pipeline
Dans PowerShell, un pipeline permet d’envoyer les résultats d’une première commande vers une deuxième commande, et de les traiter comme une entrée dans cette dernière. Dans un tableau, vous pouvez utiliser un pipeline pour traiter et manipuler les données, attribuer les résultats d’une commande à un nouveau tableau ou modifier un tableau déjà existant.
Ci-dessous, nous multiplions par exemple chaque élément du tableau par deux :
$numbers = 1,2,3,4,5 $doubled = $numbers | ForEach-Object { $_ * 2 }
Ajouter des éléments à un tableau
Dans PowerShell, la taille d’un tableau ne peut pas être changée, une fois définie. L’opérateur += vous permet néanmoins de créer un nouveau tableau en ajoutant des éléments à un tableau existant, ce qui revient en réalité à créer un nouveau tableau combiné.
$array = @(1, 2, 3) $array += 4
Créer une liste de tableaux
Si vous créez des tableaux de grande taille ou si vous y ajoutez fréquemment des éléments, l’utilisation de l’opérateur += peut s’avérer problématique et inefficace. En effet, chaque fois que vous l’utilisez, un nouveau tableau est créé, les objets du tableau précédent sont écrasés et les nouveaux éléments sont ajoutés à la fin. Dans ces cas précis, utiliser la classe ArrayList peut se révéler plus pratique.
Une classe ArrayList vous permet d’ajouter ou de supprimer des éléments sans avoir à créer de nouveau la collection entière. Tout comme un tableau classique, elle peut contenir différents types de données.
L’applet de commande suivant permet de créer une classe ArrayList :
$array3 = New-Object System.Collections.ArrayList
Supprimer un élément d’un tableau
Utilisons la classe ArrayList pour supprimer un élément d’un tableau. Pour commencer, il nous faut créer un tableau.
$array5 = "one", "two", "three", "four", "five" $array5.gettype()
Ajoutons-le ensuite à la classe ArrayList pour pouvoir le modifier facilement.
[System.Collections.ArrayList]$ArrayList1 = $array5 $ArrayList1.GetType()
Et finalement, utilisons la commande .Remove pour supprimer l’élément.
$ArrayList1.Remove("three")
Supprimer un tableau
Il n’existe aucune procédure définie pour supprimer un tableau. Vous pouvez en revanche supprimer (effacer) le contenu d’un tableau de différentes manières. L’une d’entre elles consiste à attribuer au tableau la variable $null :
$array7 = $null $array7
Voici une autre manière d’effacer le contenu d’un tableau :
$array = @("element1", "element2", "element3") $array = @()
Enfin, voici comment effacer les éléments d’une classe ArrayList :
$arrayList = New-Object System.Collections.ArrayList $arrayList.Add("element1") $arrayList.Add("element2") $arrayList.Clear()
Imprimer un tableau
La manière la plus simple d’afficher les éléments d’un tableau consiste à simplement référencer le tableau à l’aide de son nom de variable. L’exemple ci-dessous montre comment inclure le texte « Element: » devant chaque élément du tableau :
Pour enregistrer un tableau dans un fichier .txt, utilisez la commande Out-File :
$var5 | Out-File C:scriptsarray.txt
Pour l’exporter vers un fichier .csv, utilisez la commande Export-Csv :
$var6 | Export-Csv -Path C:scriptsarray.csv
Filtrer les objets d’un tableau
Pour récupérer uniquement les nombres pairs d’un tableau, nous pouvons utiliser l’applet de commande Where-Object :
$numbers = 1,2,3,4,5,6 $evenNumbers = $numbers | Where-Object { $_ % 2 -eq 0 } $evenNumbers
On peut également exécuter la cmdlet .Where(), qui ne nécessite pas l’utilisation d’un pipeline :
$numbers = 1,2,3,4,5,6 $evenNumbers = $numbers.Where({ $_ % 2 -eq 0 }) $evenNumbers
Vérifier la 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
Vérifier la présence d’une valeur spécifique
Si vous voulez savoir si l’un des éléments d’un tableau contient une valeur spécifique, vous pouvez utiliser la méthode Contains. Le code ci-dessous permet de savoir si un tableau contient soit le chiffre 2, soit le nombre 12 :
$array7 = 1,2,5,8,3,4,5 $array7.Contains(2) $array7.Contains(12)
Accéder aux éléments du tableau grâce à leur numéro d’index
Comme dans la plupart des langages de programmation, on peut accéder à chaque élément d’un tableau PowerShell en utilisant son numéro d’index. L’index d’un tableau commence à zéro. Dans un tableau qui contient trois éléments, le premier a une valeur d’index de zéro, le second de 1, et le troisième, une valeur d’index de 2.
Pour accéder aux éléments en utilisant l’indexation du tableau, vous devez écrire l’index entre crochets après la variable du tableau. L’exemple ci-dessous montre comment créer un tableau qui affiche le deuxième élément :
$colors = "Red", "Green", "Blue", "Yellow" $secondColor = $colors[1] Write-Output $secondColor
Pour accéder aux éléments à la fin du tableau, vous pouvez utiliser un index négatif : -1 correspond au dernier élément, -2 à l’avant-dernier, etc.
Utilisation de l’opérateur de jointure et de l’opérateur de fractionnement
Dans PowerShell, l’opérateur de jointure (Join) concatène un ensemble de chaînes en une seule chaîne, en utilisant parfois un délimiteur spécifique. Voici un exemple sans délimiteur :
$array = "Power", "Shell" $joined = $array -join "" # Output: "PowerShell"
Un autre exemple, cette fois-ci en utilisant un délimiteur :
L’opérateur de fractionnement (Split) effectue exactement l’inverse de l’opérateur de jointure, comme le montre l’exemple ci-dessous :
$string = "apple,banana,grape" $fruits = $string -split ","
Utilisation de l’opérateur de remplacement
L’opérateur de remplacement (Replace) permet de remplacer une chaîne par une autre. Voici à quoi ressemble l’applet de commande :
<originalString> -replace <patternToFind>, <replacementString>
L’exemple ci-dessous montre une cmdlet qui permet de remplacer le mot « World » par « PowerShell »ٲ :
$string = "Hello World" $newString = $string -replace "World", "PowerShell"
Découper un tableau
Vous pouvez créer un sous-tableau en spécifiant une plage de valeurs, comme dans l’exemple ci-dessous :
$array = 1,2,3,4,5,6,7,8,9 $subset = $array[3..6]
Inverser l’ordre des éléments d’un tableau
L’exemple ci-dessous montre comment inverser l’ordre des éléments dans un tableau :
$numbers = 1..5 [Array]::Reverse($numbers)
Conclusion
Dans la plupart des langages de script et de programmation, les tableaux constituent une structure de données essentielle qui permet de stocker, récupérer et manipuler une collection d’éléments de différents types. Une bonne compréhension du fonctionnement des tableaux améliorera votre capacité à automatiser certaines tâches à l’aide de PowerShell.
Comment Netwrix peut vous aider
Vous avez besoin de renforcer la sécurité de vos environnements Active Directory et Entra ID (anciennement Azure AD) ? Envisagez la solution Netwrix GroupID. Ses fonctionnalités automatisées de gestion des groupes et des utilisateurs réduisent le risque de violations de données tout en diminuant la perte de temps due aux tâches d’administration manuelles.
Grâce à la solution Netwrix GroupID, vous pouvez :
- Automatiser l’attribution et la suppression de privilèges d’accès à partir de votre système d’information des ressources humaines (SIRH) à l’Active Directory, à la plateforme Entra ID et aux applications qui prennent en charge le protocole SCIM, permettant ainsi aux nouveaux employés d’être rapidement productifs et diminuant considérablement le risque que des adversaires s’emparent d’identités obsolètes.
- Mettre à jour automatiquement les groupes d’annuaires en fonction de certaines modifications enregistrées dans votre SIRH, par exemple une promotion ou un changement de poste. Cette automatisation maintient à jour les droits d’accès quasiment en temps réel, une nécessité en matière de sécurité et de conformité, tout en permettant à votre équipe informatique de gagner du temps.
- Déléguer la gestion des groupes et des utilisateurs aux personnes qui savent qui doit avoir accès à quoi. Les flux de travail simplifiés permettent aux responsables de services dédiés de vérifier leurs groupes et d’approuver ou de refuser les demandes d’accès utilisateur, ce qui diminue le risque de groupes et d’utilisateurs disposant de privilèges trop élevés dans votre répertoire.
- Maintenir votre répertoire en ordre et faciliter sa gestion grâce à l’automatisation de la création, de l’expiration et de la suppression des utilisateurs.
- Maintenir et prouver votre conformité aux réglementations et aux normes en ayant une vue d’ensemble détaillée, et en pouvant compter sur une automatisation efficace et un reporting transparent sur les groupes et leurs membres.