A common scenario in an admin’s world is to figure out a way to find a certain snippet of text inside a string; called the substring. PowerShell makes finding a substring extremely easy.
Connexe : Apprenez le format de chaîne et l’expansion des chaînes
Annonce d’une formation LIVE gratuite – Démarrez votre parcours PowerShell – présentée par Johan Arwidmark. Comprenez comment les compétences PowerShell peuvent améliorer votre carrière informatique, apprenez par où commencer avec PowerShell, créez vos premiers scripts et posez des questions directement à Johan dans un environnement de formation en direct.
PowerShell et les chaînes
Dans le monde de PowerShell, une chaîne se compose d’un ensemble de caractères encadrés par des guillemets simples ou doubles. Des chaînes comme "foo"
et 'bar'
sont extrêmement courantes.
Connexe : Retour aux bases : Chaînes PowerShell
Disons que vous avez défini une chaîne dans une variable et que vous avez juste besoin d’en trouver une partie ? Par exemple, disons que vous avez une chaîne avec une adresse comme 1234 4th St. Vous aimeriez extraire le numéro et savoir que les quatre premiers caractères seront toujours le numéro dont vous avez besoin. Dans ce cas, vous pouvez utiliser la méthode substring()
de PowerShell.
Utilisation de la méthode SubString de PowerShell
Pour trouver une chaîne à l’intérieur d’une chaîne avec PowerShell, vous pouvez utiliser la méthode Substring()
. Cette méthode se trouve sur chaque objet chaîne en PowerShell.
Par exemple, peut-être avez-vous une chaîne comme The quick brown fox jumped over the fence.
Vous aimeriez trouver les cinq premiers caractères. Vous pourriez le faire en utilisant la méthode Substring()
comme ceci :
Le premier argument à passer à la méthode Substring()
est la position du caractère le plus à gauche. Dans ce cas, le caractère le plus à gauche est T
. Le deuxième argument est la position du caractère le plus à droite. Dans ce cas, le caractère est q
.
La méthode Substring()
renvoie tous les caractères situés entre eux.
Voici un exemple concret :
Disons que nous avons un code produit qui a le format suivant : XXXXVVVV-MM-DD-YYYY
. Tous les produits ont ce format de code et n’en dévient jamais. Maintenant, disons que le logiciel de gestion des stocks qui a généré ce code n’a pas inclus de champ de date de création dans la base de données.
Cependant, le logiciel a toujours inclus cette date sous la forme MM-DD-YYYY
dans le code produit lui-même, donc nous pouvons le déduire du code produit. Nous devons obtenir cette date pour nos produits afin de créer un rapport super sophistiqué mais extrêmement inutile pour la direction afin de montrer quand chaque produit a été inséré dans la base de données. Voici une bonne façon de le faire.
Dans cet exemple, nous utilisons la méthode SubString()
de PowerShell pour l’objet chaîne inhérent et passons le nombre du premier caractère que nous voulons trouver en tant que paramètre.
Depuis que nous ne spécifions pas le caractère d’arrêt, il suppose que nous voulons tous les caractères jusqu’à la fin de la chaîne. Pour trouver le nombre en premier lieu, nous obtenons d’abord la longueur de l’ensemble du code produit et soustrayons simplement 10 de cela. Dans cet exemple, cela signifie que nous voulons commencer au 10e caractère à partir de la droite de la chaîne et tout ce qui se trouve à sa droite.
Le type [DateTime]
ne correspond pas nécessairement au sujet de la sous-chaîne du message, mais j’ai pensé qu’il s’intégrerait bien avec l’exemple spécifique.
Après avoir obtenu notre chaîne du 11-12-2013, nous la convertissons ensuite en un objet [DateTime]
qui transforme ce qui était autrefois une chaîne bête en un bel objet. À partir de là, nous pouvons effectuer toutes les manipulations de dates fantaisistes que la gestion souhaite que nous fassions et générer ce joli rapport de graphique à barres!
Recherche dynamique d’une sous-chaîne en utilisant la propriété de longueur
Dans l’exemple ci-dessus, vous définissiez statiquement les positions de début et de fin des caractères à l’intérieur de la chaîne. Mais que se passe-t-il si vous ne connaissez pas la dernière position?
Peut-être devez-vous trouver la sous-chaîne des quatre derniers caractères. Vous devez trouver l’ensemble de caractères de la quatrième à la dernière position jusqu’à la fin. La chaîne dans laquelle vous effectuez la recherche pourrait avoir n’importe quelle longueur.
Au lieu de définir la position de fin comme un nombre positif qui compte à partir de la gauche, nous pouvons spécifier dynamiquement la position de fin en utilisant la longueur de la chaîne et en déduisant un certain nombre de caractères.
Utilisant la chaîne ci-dessus $product_code = 'ABCD1234-11-12-2013'
, vous voulez peut-être trouver les quatre derniers caractères. Au lieu de faire quelque chose comme ceci:
Vous pouvez remplacer 0
par $product_code.Length - 4
et même ne pas utiliser la position de fin du tout, et cela renverra les quatre derniers caractères comme indiqué ci-dessous.
Si vous ne spécifiez pas la position de fin, la méthode de sous-chaîne de PowerShell utilisera toujours la position du dernier caractère par défaut.
En utilisant la propriété length
de la chaîne, qui est le nombre total de caractères dans la chaîne, et en déduisant ce nombre, vous pouvez sélectionner dynamiquement des sous-chaînes.
Annonce d’une formation LIVE gratuite – Débutez votre parcours PowerShell – présentée par Johan Arwidmark. Comprenez comment les compétences PowerShell enrichissent votre carrière informatique, apprenez par où commencer avec PowerShell, créez vos premiers scripts et posez des questions à Johan directement dans un environnement de formation en direct.