Le type de chaîne de caractères est probablement la variable la plus populaire dans PowerShell. Je ne pense pas avoir jamais écrit de script qui ne contenait pas au moins une chaîne de caractères. Les chaînes de caractères sont idéales pour définir un ensemble simple de caractères tels qu’un nom d’ordinateur, le chemin vers un fichier texte, un chemin d’accès à une clé de registre, une URL, etc. En développant des variables à l’intérieur des chaînes et en utilisant les capacités de formatage des chaînes de PowerShell, vous pouvez faire pratiquement n’importe quoi.
Les chaînes de caractères sont définies en enfermant un ou plusieurs caractères entre des guillemets simples ou doubles, comme suit :
Définir des chaînes de cette manière est simple, mais vous vous retrouverez bientôt à avoir besoin de récupérer la valeur d’une variable à l’intérieur des chaînes.
Par exemple, peut-être avez-vous un script avec un paramètre ComputerName
et dans votre script, vous devez concaténer un préfixe standard comme SRV- comme indiqué ci-dessous.
La valeur de la variable $ComputerName
est maintenant SRV-URANUS, mais encadrer $ComputerName
à l’intérieur de la chaîne avec des guillemets doubles n’est qu’une façon d’insérer des variables dans des chaînes. Il existe quelques façons différentes de le faire. Regardons deux exemples.
Expansion de chaînes
La première méthode est probablement celle que vous connaissez déjà, appelée expansion de chaînes, ou simplement expansion de variables à l’intérieur de chaînes existantes. C’est la manière la plus courante de faire apparaître la valeur d’une variable dans une chaîne.
Cela nécessite de placer la variable à l’intérieur d’une chaîne avec des guillemets doubles. Les guillemets simples ne fonctionneront pas car ils traitent tous les caractères littéralement.
Par exemple, peut-être que j’ai besoin de spécifier le chemin vers un fichier. Je connais le chemin de base du dossier mais pas encore le nom du fichier réel. Je pourrais créer une variable appelée $FullPath
et entrer statiquement le chemin du dossier, mais faire du nom de fichier une variable.
Et si vous devez spécifier une propriété d’objet à l’intérieur d’une chaîne ? Cela semble un peu différent. Dans ce cas, je dois entourer la propriété de parenthèses et préfixer un signe dollar à l’avant. C’est ce qu’on appelle un opérateur de sous-expression. Cela dit à PowerShell d’élargir d’abord la valeur.
L’expansion de chaîne est très courante, mais que faire si vous avez une chaîne plus compliquée ?
Utilisation de l’opérateur de formatage de chaîne PowerShell
Une autre façon de garantir que les valeurs des variables sont insérées dans vos chaînes est d’utiliser l’opérateur de formatage de Powershell (-f
).
En utilisant l’opérateur de formatage, vous n’avez pas besoin de placer la variable ou la propriété à l’intérieur d’une chaîne entourée de guillemets doubles. Vous pouvez créer une chaîne entre guillemets simples et spécifier les variables qui iront dans cette chaîne à l’extérieur, comme indiqué ci-dessous.
Vous pouvez voir que cela a exactement le même effet. Bien que cette fois-ci, vous n’ayez pas eu à utiliser de guillemets doubles ou à vous soucier d’encadrer la propriété de l’objet entre parenthèses et un autre signe dollar. Cela semble un peu plus propre mais pourrait être plus difficile à comprendre. L’utilisation de l’opérateur de formatage vous oblige à remplacer le {0}
par $File.Name
dans votre esprit.
Pour ajouter d’autres variables, il suffit d’incrémenter vos balises de 1 et de continuer à ajouter des variables séparées par une virgule à l’opérateur de format. Tant que la position de l’index de l’opérateur de format correspond à la position dans l’étiquette de la chaîne, vous pouvez ajouter autant de références que vous le souhaitez.
Quand utiliser l’opérateur de format
I usually prefer to place variables inside of the string and expand them because I don’t have to match an index with a value. However, there are exceptions, as in the case of special characters that must be escaped.
Par exemple, disons que vous devez exécuter une utilitaire en ligne de commande qui nécessite que vous lui transmettiez un nom de fichier. Le chemin de ce fichier peut contenir des espaces, vous devrez donc entourer cette référence de guillemets doubles. Sans ces guillemets doubles, utility.exe ne pourrait pas interpréter correctement l’argument du fichier.
Supposons maintenant que vous voulez faire cela dans un script PowerShell. Si vous utilisez des chaînes en expansion, cela pourrait paraître un peu désordonné car vous devez utiliser un accent grave pour échapper aux guillemets doubles.
Maintenant, obtenons le même résultat avec l’opérateur de format.
I don’t have to use any escape characters. This may seem like a simple example but as soon as you come across large strings that require a lot of escaping you will soon see the real benefit of using the format operator!
Résumé
La prochaine fois que vous vous retrouvez à devoir substituer des variables à l’intérieur d’une chaîne, réfléchissez à la méthode qui serait la plus lisible. Cela vous fera gagner du temps à long terme.
Pour plus d’articles sur le travail avec les chaînes, assurez-vous de consulter La sous-chaîne PowerShell : Trouver une chaîne à l’intérieur d’une chaîne et Variables PowerShell dans les chaînes.
Source:
https://adamtheautomator.com/powershell-string-format/