3.2 : Tableaux : stocker plusieurs pièces

Une caisse ne contient qu’une seule pièce à la fois. Sophie remplace votre caisse par un casier à compartiments multiples : « Pour stocker plusieurs pièces d’un coup — une liste de serveurs, une liste d’utilisateurs — il te faut un tableau. »

Créer un tableau

En PowerShell, un tableau se crée avec des virgules, avec ou sans symbole @() :

$serveurs = "SRV-01", "SRV-02", "SRV-03"
$serveurs = @("SRV-01", "SRV-02", "SRV-03")

Les deux écritures sont équivalentes. La syntaxe @() devient utile pour créer un tableau vide ou un tableau à un seul élément, cas où la virgule seule prêterait à confusion :

$tableauVide = @()
$unSeulElement = @("SRV-01")

Accéder à un élément par son index

Comme dans la plupart des langages, l’index commence à 0, pas à 1 :

$serveurs[0]   # SRV-01
$serveurs[2]   # SRV-03
$serveurs[-1]  # SRV-03 (le dernier élément, pratique pour ne pas compter la longueur)

Connaître la taille d’un tableau

$serveurs.Count

Ajouter ou retirer des éléments

Un tableau PowerShell classique est de taille fixe en interne : ajouter un élément recrée en réalité un nouveau tableau complet en mémoire. Pour un usage simple, ça reste transparent :

$serveurs += "SRV-04"

Pour des scripts qui ajoutent beaucoup d’éléments un par un (des centaines, voire des milliers), on préfère utiliser une ArrayList ou une List[string], plus performantes. On ne rentre pas dans ce détail ici, mais gardez en tête que += en boucle sur un grand volume peut ralentir un script — un sujet qu’on retrouvera si besoin en section 5.

Parcourir un tableau

Deux façons courantes de parcourir chaque élément d’un tableau, selon le contexte :

Avec le pipeline et ForEach-Object (cohérent avec toute la logique vue en section 2) :

$serveurs | ForEach-Object { Write-Output "Vérification de $_" }

Avec une boucle foreach classique (on la détaille en section 5) :

foreach ($serveur in $serveurs) {
    Write-Output "Vérification de $serveur"
}

Les deux font la même chose ici. Retenez simplement que ForEach-Object s’utilise dans un pipeline (après un |), tandis que foreach est une structure de contrôle autonome — la nuance deviendra plus concrète en section 5.

Filtrer un tableau existant

Rien n’empêche d’appliquer Where-Object ou Sort-Object directement sur un tableau déjà stocké dans une variable, exactement comme sur le résultat d’une cmdlet :

$serveurs | Where-Object { $_ -like "*01*" }

Un exemple concret Nordika

$serveursCritiques = "SRV-AD-01", "SRV-SQL-01", "SRV-WEB-01"

foreach ($serveur in $serveursCritiques) {
    $etatService = Get-Service -ComputerName $serveur -Name "Spooler" -ErrorAction SilentlyContinue
    Write-Output "$serveur : $($etatService.Status)"
}

(La gestion des erreurs avec -ErrorAction sera détaillée en section 5 — gardez juste en tête l’idée générale pour l’instant.)

Un tableau, c’est le casier de l’atelier : plusieurs pièces bien rangées, chacune accessible par sa position. Dans la prochaine leçon, on découvre un autre type de rangement, où chaque pièce n’est plus identifiée par sa position, mais par une étiquette : la hashtable.

Dans la prochaine leçon, place aux hashtables : l’étiquette avec les caractéristiques.