Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

Comment utiliser la méthode Trim de PowerShell pour nettoyer une chaîne de caractères ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à utiliser la méthode de Trim() de PowerShell qui va s'avérer très utile pour nettoyer une chaine de caractères, que ce soit pour supprimer les espaces inutiles, ou un autre type de caractères.

La méthode Trim() est intégrée nativement dans PowerShell, ainsi que dans d'autres langages, et elle est généralement utilisée pour supprimer les espaces au début et à la fin d'une chaîne de caractères. Ces espaces indésirables peuvent correspondre à un espace unique, mais aussi à une tabulation.

Elle est utile dans différents scénarios, notamment quand le script demande à l'utilisateur de saisir quelque chose (via un Read-Host) ou que vous traitez des données récupérées à partir d'un fichier source.

II. Exemples d'utilisation de Trim()

A. Supprimer les espaces

Nous allons commencer par utiliser la méthode Trim() de PowerShell pour éliminer les espaces en début et en fin de chaînes de caractères.

Voici la chaine de caractères que nous allons manipuler :

$Texte = "  Tutoriel pour IT-Connect  "

Nous pouvons constater qu'il y a des espaces à trois endroits : avant le texte (2), après le texte (2), et entre chaque mot. Puisque les espaces sont en quelque sorte "invisibles", nous allons obtenir la longueur de cette chaine de caractères via la propriété "Length".

$Texte.Length
# Résultat actuel :
28

Maintenant, nous allons appliquer la méthode Trim() sur cette chaine de caractères, stocker, le résultat dans une variable et calculer la longueur de la nouvelle chaine obtenue.

$TexteTrim = $Texte.Trim()
$TexteTrim.Length

Cette fois-ci, nous obtenons une valeur différente : 24 au lieu de 28. En effet, la méthode Trim() a supprimé les espaces avant et après le texte, qui sont inutiles, tout en conservant les espaces entre les mots, qui eux sont utiles !

Testez par vous-même avec ces quelques lignes de code :

Write-Host "Sans la méthode Trim()" -ForegroundColor Green

$Texte = "  Tutoriel pour IT-Connect  "
$Texte
$Texte.Length

Write-Host "Avec la méthode Trim()" -ForegroundColor Green

$TexteTrim = $Texte.Trim()
$TexteTrim
$TexteTrim.Length

Ce qui donne :

PowerShell - Supprimer espaces inutiles avec Trim

B. Supprimer le caractère de votre choix

Par défaut, Trim() supprime les espaces inutiles (espace, tabulation). Sachez que vous pouvez l'utiliser pour supprimer un caractère spécial de votre choix. Imaginons que nous souhaitons éliminer les "#" en début et fin de chaînes de caractères. Il suffirait d'utiliser la méthode Trim() de cette façon :

$Texte.Trim("#")

Vous pouvez tester avec ce bout de code où les espaces sont remplacés par le symbole "#" pour cette démonstration.

Write-Host "Sans la méthode Trim()" -ForegroundColor Green

$Texte = "##Tutoriel pour IT-Connect##"
$Texte
$Texte.Length

Write-Host "Avec la méthode Trim()" -ForegroundColor Green

$TexteTrim = $Texte.Trim("#")
$TexteTrim
$TexteTrim.Length

Ce qui donne bien le résultat attendu :

PowerShell - Supprimer les caractères inutiles avec Trim

Il est important de préciser que dans ce cas, Trim() va supprimer les caractères "#" mais il va conserver les espaces éventuels.

C. Supprimer plusieurs types de caractères

Si vous souhaitez utiliser la méthode Trim() pour supprimer les espaces, ainsi que d'autres caractères, sachez que c'est possible. Dans ce cas, vous devez simplement ajouter dans les parenthèses cette liste de caractères.

Dans l'exemple ci-dessous, nous allons chercher à éliminer les espaces, les "#" et les "?". Voici un bout de code pour tester :

Write-Host "Sans la méthode Trim()" -ForegroundColor Green

$Texte = "## Tutoriel pour IT-Connect ?"
$Texte
$Texte.Length

Write-Host "Avec la méthode Trim()" -ForegroundColor Green

$TexteTrim = $Texte.Trim("#? ")
$TexteTrim
$TexteTrim.Length

Ce qui donne :

Voilà, nous obtenons bien le résultat attendu ! Sachez que Trim() fonctionne aussi avec les lettres et les chiffres. Cette méthode n'est pas réservée aux caractères spéciaux même si nous l'utilisons souvent dans ce but.

Remarque : la méthode Trim() peut également être utilisée pour supprimer un caractère à partir de son code Unicode. Dans ce cas, et si vous avez ce besoin particulier, il faut adopter la syntaxe suivante : $Texte.Trim([char]0x0061). Ce code correspond à la lettre "a".

D. TrimStart() et TrimEnd()

La méthode Trim() est très pratique, mais elle effectue systématiquement le nettoyage au début et à la fin de la chaîne de caractères. Si vous avez besoin de supprimer uniquement les espaces ou les caractères inutiles au début de la chaîne, ou à l'inverse, à la fin de la chaîne, sachez que vous pouvez utiliser ces deux méthodes :

  • TrimStart() pour les caractères au début de la chaîne
  • TrimEnd() pour les caractères à la fin de la chaine

La méthode TrimEnd() est utile lorsque l'on manipule des chemins pour supprimer le dernier "\" qui peut être ajouté à la suite du dernier répertoire, ce qui permettra facilement de venir ajouter le nom d'un autre répertoire en le préfixant par "\" sans risquer de se retrouver avec un double "\\". Ceci nous permet de contrôler que le chemin aura bien le format attendu : si ce chemin est fourni par une saisie utilisateurs, vous avez une chance sur deux que le "\" à la fin soit présent. Avec TrimEnd(), ce problème potentiel est éliminé.

Voici un exemple où l'on élimine le caractère "\", ce qui oblige à rajouter un caractère d'échappement :

$Chemin = "C:\TEMP\"
$Chemin.TrimEnd("/\")
# Résultat : 
C:\TEMP

Ces deux méthodes fonctionnent sur le même principe et apportent un peu plus de souplesse.

III. Conclusion

Avec PowerShell, la méthode Trim() fait partie des incontournables, au même type que d'autres méthodes que j'ai l'habitude d'utiliser fréquemment : Split(), Substring(), etc.

The post Comment utiliser la méthode Trim de PowerShell pour nettoyer une chaîne de caractères ? first appeared on IT-Connect.

Under The Wire, un wargame pour apprendre PowerShell

I. Présentation

Dans cet article, nous allons découvrir Under the Wire, une plateforme gratuite qui héberge plusieurs wargames pour apprendre PowerShell en s'amusant. Oui, je vous assure, on peut s'amuser avec PowerShell.

Les wargames sont des jeux appréciés, car ils permettent d'apprendre en jouant, c'est-à-dire qu'il y a une réelle portée éducative derrière un wargame. Celui que l'on va découvrir aujourd'hui s'appelle Under the Wire et il a pour objectif de vous faire progresser en PowerShell !

Cet article est disponible au format vidéo :

Précédemment, nous avions également vu le module PowerShell Koans pour progresser en PowerShell en répondant à différentes questions et exercices. PowerShell Koans est dans un style totalement différent, mais vous pouvez le tester gratuitement aussi :

II. Comment fonctionne Under the Wire ?

Under the Wire propose un ensemble de missions découpées en plusieurs quêtes dont l'objectif est de vous permettre d'apprendre de nouvelles commandes PowerShell. A chaque fois, vous devez la ou les commandes PowerShell permettant de récolter une ou plusieurs informations. Ainsi, vous allez pouvoir progresser en trouvant la réponse à l'énigme de chaque quête.

Actuellement, il y a 5 wargames accessibles :

  • Century
  • Cyborg
  • Groot
  • Oracle
  • Trebek

A chaque fois, il y a 15 quêtes à accomplir pour arriver à la fin d'un jeu. Pour chaque quête, on vous explique quelle information vous devez récupérer, et cette information sert de mot de passe pour accéder à la quête suivante. Ce qui signifie que vous devez traiter les quêtes dans l'ordre, et surtout, si vous n'arrivez pas à vous connecter à la quête suivante, c'est probablement que votre réponse est incorrecte.

III. Découverte du jeu Century

Pour accéder à un jeu, comme à celui nommé Century, par exemple, vous devez accéder au Slack d'Under the Wire pour récupérer le nom d'utilisateur et le mot de passe d'accès. Ceci permet d'accéder à la quête 0 pour commencer à jouer !

Pour accéder à l'environnement, vous devez établir une connexion SSH. Vous pouvez utiliser PuTTY, un outil équivalent, ou le client SSH intégré à Windows. Pour utiliser le client SSH de Windows, il suffit d'utiliser la syntaxe suivante (en indiquant le nom d'utilisateur récupéré depuis le Slack du projet :

ssh century.underthewire.tech -l utilisateur
# ou 
ssh [email protected]

Une fois connecté, vous pouvez accéder à la quête n°1, ou au niveau 1, si vous préférez. Pour vous roder un peu sur le sujet, nous allons solutionner ensemble les premiers niveaux.

A. Century 1

Pour le premier niveau, la consigne est la suivante : "The password for Century2 is the build version of the instance of PowerShell installed on this system.". Soit en français : "Le mot de passe pour Century2 est le numéro de build de la version PowerShell installée sur ce système."

Pour obtenir cette information, nous devons donc rechercher comment obtenir le numéro de version en PowerShell. Car oui, ici, tout doit être fait en ligne de commande PowerShell. Nous pouvons obtenir l'information via la variable prédéfinie $PSVersionTable.

Cette commande retourne le résultat suivant :

On nous demande le numéro de build, donc la réponse ce sera "10.0.14393.5582" (à ne pas confondre avec PSVersion). Cela signifie que cette valeur va nous servir de mot de passe pour accéder au niveau 2.

Nous pouvons quitter Century 1 :

exit

B. Century 2

Nous devons établir une connexion SSH, sur le même hôte, mais cette fois-ci avec le nom d'utilisateur "century2". Le mot de passe correspond à la réponse du niveau précédent, à savoir "10.0.14393.5582".

ssh century.underthewire.tech -l century2

Voilà qui est fait !

Prenons connaissance de l'énoncé du niveau 2 : "The password for Century3 is the name of the built-in cmdlet that performs the wget like function within PowerShell PLUS the name of the file on the desktop.". Ce qui nous donne en français : "Le mot de passe pour Century3 est le nom du cmdlet intégré qui exécute la fonction wget dans PowerShell PLUS le nom du fichier présent sur le Bureau."

Ce qui signifie que nous devons collecter 2 informations pour constituer le mot de passe.

  • Le prompt est déjà positionné sur le Bureau, donc il suffit de lister le contenu du répertoire actuel afin d'obtenir le nom du fichier : "443"
Get-ChildItem
  • En ce qui concerne le nom de la commande qui sert à effectuer l'équivalent d'un "wget" en PowerShell, il s'agit du cmdlet "Invoke-WebRequest". Nous pouvons le vérifier car il y a un alias pour wget.
Get-Alias wget

Voici en image :

Ainsi, la réponse au niveau 2 est : "invoke-webrequest443" (sans les majuscules, sinon ça ne fonctionne pas pour se connecter à Century 3).

C. Century 3

Nous allons pouvoir nous connecter à Century 3, toujours sur le même principe :

ssh century.underthewire.tech -l century3

Cette fois-ci, voici l'information à récupérer pour accéder au niveau suivant : "The password for Century4 is the number of files on the desktop.". En français : "Le mot de passe pour Century4 est le nombre de fichiers sur le bureau.".

Nous devons compter le nombre de fichiers sur le Bureau de la session. Il y en a suffisamment pour que ce soit pénible de compter manuellement. Ahah. Tant mieux, car notre objectif est d'utiliser PowerShell ! Nous pouvons obtenir l'information de plusieurs façons, dont celles-ci :

(Get-ChildItem).count
Get-ChildItem | Measure-Object

Nous avons la réponse pour accéder au niveau suivant : "123".

A vous de jouer pour la suite !

IV. Conclusion

Au total, il y a un peu plus de 70 niveaux à effectuer si vous faites tous les jeux disponibles sur Under the Wire ! C'est assez varié au niveau des informations à rechercher (il y aussi une partie Active Directory / GPO) et le joueur doit faire l'effort de tout faire en PowerShell pour atteindre l'objectif de chaque niveau.

The post Under The Wire, un wargame pour apprendre PowerShell first appeared on IT-Connect.

Comment apprendre et progresser en PowerShell à l’aide de PSKoans ?

I. Présentation

Dans ce tutoriel, nous allons utiliser le module PowerShell Koans, appelé aussi PSKoans, afin de s'exercer au scripting PowerShell ! En effet, PowerShell Koans est un module que l'on peut utiliser soi-même pour progresser, mais qui peut être intéressant également pour les formateurs dans le but d'exercer les étudiants en phase d'apprentissage du langage PowerShell.

Le module PowerShell Koans s'appuie sur un autre module : Pester. Pour ceux qui ne connaissent pas Pester, il s'agit d'un module PowerShell permettant d'effectuer des tests unitaires pour valider le bon fonctionnement d'un script.

Ainsi, PowerShell Koans se présente comme une suite d'exercices qu'il va falloir résoudre, un peu sur le principe des textes à trou, sauf qu'ici il s'agit d'extrait de code PowerShell. Au total, PSKoans contient 682 exercices répartis dans plusieurs catégories, dont :

  • Les booléens, les chaines de caractères (string) et les nombres
  • Les tableaux et les hashtables
  • Les opérateurs de comparaison
  • Les structures conditionnelles
  • Les fonctions
  • La structure ForEach
  • Les boucles
  • Le tri des objets
  • Les objets personnalisés
  • La gestion de fichiers CSV
  • Etc...

Bien que PSKoans n'ait pas été mis à jour depuis quelques années, il fonctionne toujours très bien et il est pertinent en phase d'apprentissage du langage PowerShell.

"Chaque kōan (chaque question) est représenté par un test Pester qui échoue. Votre but est de réussir ces tests en remplissant la bonne réponse ou en écrivant le bon code. Les koans sont d'abord très simples pour vous familiariser avec les concepts de base, puis ils deviennent de plus en plus difficiles. Vous apprendrez ainsi de nombreux aspects de PowerShell pour les débutants, les intermédiaires et les avancés.", peut-on lire sur le GitHub officiel.

II. Comment installer PSKoans ?

Le module PSKoans a besoin du module Pester pour fonctionner. En principe, Pester est inclus nativement avec Windows, donc vous ne devriez pas avoir besoin de l'installer. Mais, si vous avez besoin de le faire, voici la commande à exécuter :

# Installer le module Pester :
Install-Module -Name Pester
# Vérifier la présence de ce module :
Get-Module Pester -ListAvailable

Ensuite, vous devez installer le module "PSKoans" sur votre PC. Celui-ci étant disponible via la PowerShell Gallery, nous pouvons l'installer facilement à l'aide de cette commande :

Install-Module -Name PSKoans

Une fois que c'est fait, vous pouvez lister toutes les commandes disponibles dans ce module pour avoir un aperçu :

Get-Command -Module PSKoans

III. Comment utiliser PSKoans ?

A. Compléter son premier exercice

Pour avoir un aperçu de sa progression globale et effectuer un premier exercice, nous devons exécuter l'une de ces deux commandes (la première étant un alias de la deuxième) :

Measure-Karma
# ou
Show-Karma

Nous pouvons voir une sortie avec du texte en différentes couleurs. Ce premier module sert avant tout à prendre en main PSKoans. Nous pouvons lire "Veuillez méditer sur le code suivant", et dans le troisième bloc de code en rouge, nous pouvons voir : "$____". Nous allons devoir compléter le code à cet endroit de façon à répondre à la problématique suivante : "On s'attendait à $true, mais on a obtenu $null" (Expected $true, but got $null).

À la fin, nous avons également notre progression :

  • Sur le module en cours : "AboutAssertions : 0/4"
  • Au total, tout module confondu : "Total : 0/682"
PowerShell Koans - Voir son score actuel

Pour "méditer sur le code" correspondant à ce premier exercice, nous allons exécuter cette commande :

Measure-Karma -Meditate

Cette commande va ouvrir automatiquement Visual Studio Code s'il est détecté sur votre machine. Sinon, PowerShell ISE sera sélectionné.

Ceci va nous permettre de modifier directement le fichier PS1 correspondant au module "AboutAssertions" de PSKoans.

PowerShell Koans - Effectuer un premier exercice

Pour rappel, la consigne est la suivante : "On s'attendait à $true, mais on a obtenu $null", donc nous allons tout simplement remplacer "$____" par "$true" comme ceci :

PowerShell Koans - Solution premier exercice

Une fois que c'est fait, nous pouvons sauvegarder le fichier et relancer la commande permettant de calculer le score. Nous pouvons voir que nous avons correctement complété le premier exercice :

PowerShell Koans - Suivi de la progression

Ensuite, nous devons poursuivre en complétant chaque partie "___" présente dans le fichier afin de trouver la bonne solution. Vu que les exercices sont écrits sous la forme de tests Pester, ce n'est pas toujours facile pour un novice de comprendre le résultat attendu.

Il faut vraiment se concentrer sur bloc de code compris dans l'instruction "It{ }" et se référer à l'instruction "Should -Be" pour voir le résultat attendu.

PSKoans - Exemple

Une fois que le premier module "AboutAssertions" est complété, PSKoans passe sur le module sur les booléens. Ici, l'objectif est d'indiquer "$true" ou "$false" (vrai ou faux) pour chaque exercice. Ces tests vont vous permettre de vous exercer à la lecture de comparaisons avec différents opérateurs.

PowerShell Koans - Exercice sur les booléens

À chaque fois, pensez à enregistrer et à vérifier votre score au fur et à mesure pour voir si vous avez indiqué la bonne réponse (ou pas).

B. S'exercer sur un module spécifique

Si vous maitrisez déjà certaines notions en PowerShell, vous n'avez peut-être pas envie de faire tous les modules de PSKoans dans l'ordre. Sachez que vous pouvez choisir le module de votre choix.

Tout d'abord, pour lister tous les modules, utilisez cette commande :

Get-PSKoan

Voici la liste complète :

Get-PSKoan

Si l'on souhaite s'exercer sur la notion de variables, nous allons exécuter cette commande :

Measure-Karma -Topic <nom du module>
Measure-Karma -Topic AboutVariables

Cette première commande va permettre d'afficher notre score actuel sur le module en question et de le sélectionner en quelque sorte. Ensuite, pour effectuer les exercices, il suffira d'exécuter cette commande :

Measure-Karma -Meditate

Visual Studio Code va s'ouvrir et afficher les exercices correspondants. Dans l'exemple ci-dessous, nous pouvons voir trois premières zones à compléter. Je vous encourage également à lire les commentaires (blocs en vert) car ils fournissent des explications intéressantes.

PowerShell Koans - Exercice sur les variables

Puis, sauvegardez et vérifiez votre score sur ce module :

Measure-Karma -Topic AboutVariables

Voici ce que l'on nous demande pour ces trois exercices (en vérité, les deux premières zones à compléter font partie du même exercice) :

1 - On nous dit "$Value -eq $Fifty | Should -BeTrue" : $Value doit être égale à $Fifty (-BeTrue). On sait que $Fifty = 50, donc $Valeur doit être égal à 50 aussi.

2 - On nous dit "___ | Should -Be $Greeting", donc la valeur à trouver doit être également à la valeur de la variable $Greeting. La variable $Greeting est définie via la commande Set-Variable et sa valeur est "Hello!" : c'est donc la solution à cet exercice.

3 - On nous dit "$Number | Should -BeOfType [__]", donc on doit déterminer le type de la variable $Number. On sait que cette variable est égale au nombre "10", donc en principe il doit s'agir d'une variable de type "int" pour Integer. La solution à cet exercice est "int".

Il s'agit bien des bonnes réponses :

J'espère que vous avez bien compris la logique de fonctionnement de PowerShell Koans afin de pouvoir vous exercer sur les modules de votre choix.

C. La sauvegarde de la progression

Sachez que la progression est sauvegardée au fur et à mesure dans les fichiers PS1 que vous modifiez. Pour savoir où est stockée votre progression actuelle, exécutez cette commande :

Get-PSKoanLocation

Ceci vous retournera le chemin vers les fichiers de PSKoans, soit par défaut à la racine du répertoire de la session de l'utilisateur.

IV. Conclusion

Si vous souhaitez utiliser PowerShell Koans avec des étudiants, sachez que vous pouvez créer vos propres koans (exercices/questions) ! Ceci est expliqué dans la documentation officielle, notamment à cet endroit.

En tant que Maitre PowerShell, je vous souhaite bon courage pour accomplir un maximum de kōans !

The post Comment apprendre et progresser en PowerShell à l’aide de PSKoans ? first appeared on IT-Connect.

❌