Comment concaténer des chaînes (string) avec PowerShell ?

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"
Maintenant, si l'on veut concaténer ces deux valeurs pour en faire une seule qui sera stockée dans une nouvelle variable nommée "$prenomnom", on va utiliser cette syntaxe :
$prenomnom = $prenom + $nom
Le problème, c'est que cette syntaxe va retourner le résultat suivant :
FlorianBurnel
Autrement dit, il manque un espace entre les deux valeurs ! Pour améliorer le résultat, on va concaténer ces deux valeurs avec un espace qui viendra se positionner entre les deux chaînes. Ce qui donne la syntaxe suivante :
$prenomnom = $prenom + " " + $nom
Puisqu'il y a un espace entre les guillemets, on obtient une sortie plus propre :
Florian Burnel
Maintenant, si l'on veut simplement écrire le prénom et le nom dans la console, on pourra utiliser cette syntaxe sans le "+" :
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" :

PowerShell - Concaténer avec -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 :

PowerShell - Concaténer avec -f

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 !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5500.Voir tous les posts

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.