Comment concaténer des chaînes (string) avec PowerShell ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à concaténer des chaînes de caractères (string) avec PowerShell : une opération fréquence pour ne pas dire indispensable lorsque l'on code des scripts en PowerShell, ou dans un autre langage d'ailleurs.
Mais au fait, ça veut dire quoi "concaténer des chaînes de caractères" ? La concaténation correspond à l'action de joindre au moins deux chaînes de caractères en une seule chaîne de caractères. Par exemple, si l'on a le prénom "Florian" d'un côté et le nom "Burnel" de l'autre, on pourrait avoir l'objectif de concaténer ces deux valeurs (soit deux chaînes de caractères) pour former une seule chaîne avec le nom complet : Florian Burnel.
En PowerShell, il y a plusieurs manières de concaténer des chaînes : c'est ce que nous allons étudier dans ce tutoriel.
II. PowerShell - Concaténer avec l'opérateur "+"
Commençons par le plus simple et le plus facile à comprendre : la concaténation de chaînes avec l'opérateur "+", comme si on allait additionner des valeurs. Pour reprendre l'exemple évoqué en introduction, on va définir deux variables avec le prénom et le nom. Ce qui donne :
# Prénom $prenom = "Florian" # Nom $nom = "Burnel"
$prenomnom = $prenom + $nom
FlorianBurnel
$prenomnom = $prenom + " " + $nom
Florian Burnel
Write-Host $prenom $nom
Si l'on ajoute le "+", il sera écrit dans la console comme s'il s'agissait d'un caractère faisant partie de la chaîne de caractères.
Nous pourrions imaginer la concaténation entre une chaîne de caractères et nos deux variables de cette façon :
Write-Host "Je m'appelle $prenom $nom !"
Ce qui donne :
Je m'appelle Florian Burnel !
Avant de passer à la suite, il est important de savoir que si vous récupérez une valeur à partir d'une propriété d'un objet, vous devez utiliser une syntaxe particulière. En effet, vous devez encadrer l'appel de la valeur de la propriété ciblée par "$()". Par exemple :
$Personne = [PSCustomObject]@{ Prenom = "Florian" Nom = "Burnel" } Write-Host "Bonjour, je m'appelle $($Personne.Prenom) $($Personne.Nom)"
Voilà pour cette première méthode pour concaténer des valeurs de façon simple. Mais en même temps, on a très souvent besoin de faire ce type de manipulation.
III. PowerShell - Concaténer avec l'opérateur "-join"
Oublions la méthode basée sur l'opérateur "+" pour la suite de cet article. En PowerShell, on peut utiliser un autre opérateur pour concaténer des chaînes (string) : -join. Ainsi, on va dresser la liste des valeurs à rassembler et indiquer quel doit être le caractère qui viendra séparer chaque valeur. Par exemple, il peut s'agir d'un espace, d'une virgule ou d'un point-virgule selon les besoins.
Si l'on reprend le même exemple que précédemment, mais que l'on applique la méthode -join, on obtient le code suivant :
$prenomnom = $prenom,$nom -join " "
La valeur $prenomnom contiendra tout simplement la valeur suivante :
Florian Burnel
La technique basée sur l'opérateur "-join" est très pratique pour concaténer toutes les valeurs contenues dans un objet. Par exemple, si l'on récupère une liste d'utilisateurs dans l'Active Directory avec Get-ADUser, on obtient un objet (sous la forme d'un tableau de valeurs). Chaque case du tableau retourne un utilisateur. Grâce à "-join", on va pouvoir regrouper toutes ces valeurs en une seule.
Ce qui donne :
$ListeUtilisateurs = (Get-ADUser -Filter * -SearchBase "OU=Personnel,DC=it-connect,DC=local").Name
$ListeUtilisateurs -join ", "
Le résultat ci-dessous illustre très bien mes propos et la différence avec ou sans "-join" :
IV. PowerShell - Concaténer avec l'opérateur "-f"
Une autre technique à connaître et que vous êtes susceptible de rencontrer et d'utilise repose sur l'utilisation de l'opérateur "-f" qui est l'opérateur de format. Une méthode particulièrement pratique pour insérer plusieurs valeurs dans une chaîne de caractères. Par exemple, plusieurs valeurs basées sur des variables au sein d'une chaîne de caractères destinée à alimenter un fichier de log.
Avec l'opérateur de format, on va définir des espaces réservés dans la chaîne de caractères pour spécifier où l'on souhaite intégrer une valeur/variable. Pour que ces espaces soient facilement identifiables, ils seront numérotés et inscrits entre accolades. Ensuite, on va appeler nos valeurs et elles seront appliquées dans l'ordre.
Pour que ce soit plus parlant voici un exemple avec deux espaces réservés pour placer le prénom et le nom dans une phrase :
$phrase = "Bonjour, je m'appelle {0} {1}" -f $prenom, $nom
Le résultat est correct :
Plutôt que d'appeler des variables en tant que valeur, on peut exécuter des commandes, écrire une chaîne ou encore piocher dans un objet. Voici un autre exemple où l'on récupère dynamiquement la date :
"{0} - Nouvel événement détecté : {1}" -f (Get-Date -Format yyyyMMdd-hhmmss), "Tutoriel PowerShell en cours de rédaction !"
Ce qui va retourner :
20230505-044620 - Nouvel événement détecté : Tutoriel PowerShell en cours de rédaction !
Il est à noter que vous pouvez utiliser deux fois le même numéro. Dans ce cas, la valeur sera inscrite deux fois.
V. Conclusion
Suite à la lecture de ce tutoriel, vous devriez être capable de concaténer des chaînes de caractères avec PowerShell ! Nous avons vu trois méthodes différentes, mais il en existe d'autres... Toutefois, ce sont celles-ci, à mon sens, que l'on utilise et rencontre le plus souvent.
A vous de jouer ! Bon script !