Découvrez ce qu’est une variable
Maintenant que vous maîtrisez les cmdlets, et même l’exécution de plusieurs cmdlets via un pipeline, vous allez en apprendre plus sur les variables, et comment stocker une donnée, le temps du fonctionnement de nos scripts PowerShell.
Commençons par comprendre ce qu’est une variable. Je vous explique tout ça dans la vidéo ci-dessous.
En bref :
Une variable, c’est une sorte de boîte qui correspond à un emplacement dans la mémoire où est stockée une donnée.
Une variable possède obligatoirement 3 informations : un type, un nom et une valeur.
Le nom commence toujours par le signe “$”, et ne comporte ni espace, ni accent.
Le type permet de préciser quel type de donnée est attendu dans notre variable : par exemple [String] pour une chaîne de caractères, ou Array pour un tableau.
L’affectation d’une valeur se fait toujours par le signe “=”
Maintenant que vous savez ce qu’est une variable, vous allez pouvoir commencer à les utiliser.
Utilisez vos premières variables
Comme toujours depuis le début de ce cours, vous allez pouvoir aller dans l’invite de commandes PowerShell.
Vous allez voir, gérer ses variables sous PowerShell est un vrai plaisir !
Vous pouvez commencer par écrire ceci :
$texteAccueil = “Bienvenue dans ce cours”
Et si vous avez bien suivi, vous venez là de faire votre première affectation. Félicitations !
En écrivant cette ligne, vous avez affecté une variable, mais avant, vous l’avez déclarée. La déclaration va être en quelque sorte la création du conteneur, là où l’affectation en est le remplissage.
Maintenant, pour accéder à votre variable, rien de plus simple, il suffit de l’appeler via son nom : $texteAccueil.
Et cet appel, vous pouvez le faire encore et encore.
Maintenant que vous avez compris le principe, vous allez pouvoir écrire ceci : $texteAccueil = “Au revoir”
Rappelez de nouveau votre variable en tapant $texteAccueil.
Mince alors ! J’ai perdu le premier texte !
Exactement ! Et si je vous ai fait faire ça, c’est pour vous sensibiliser à la perte de valeur par écrasement. Dans une variable, on ne met qu’une seule donnée (sauf dans le cas d’un tableau, bien sûr).
Les variables ont d’autres avantages et possibilités que leur simple appel. Vous allez voir quelques transformations que vous pouvez effectuer sur vos chaînes de caractères.
Chaque chaîne de caractères possède des méthodes, c'est-à-dire des fonctions internes qui permettent d’effectuer des traitements sur ces chaînes de caractères.
Vous allez pouvoir en essayer quelques-unes !
Dans votre invite de commande, tapez ceci : $texteAccueil.ToUpper() et validez la commande.
Vous avez vu ? Une réponse est apparue, avec le texte en majuscules !
Décortiquons ce que nous venons d’écrire.
La première chose que vous avez écrite est votre variable. Ensuite, vous avez mis un point. En mettant ce point, c'est comme si vous aviez précisé sur quel objet vous alliez travailler.
Enfin, vous avez mis la fonction “ToUpper()”, qui permet de mettre une chaîne de caractères en majuscules. On reconnaît là une fonction ou une méthode grâce aux parenthèses, qui permettent d’ajouter des paramètres.
Essayez donc avec ToLower() ! À l’inverse de ToUpper(), celle-ci va mettre la chaîne de caractères en minuscules.
Une dernière méthode sur les chaînes de caractères est intéressante.
Cette méthode s’appelle “SubString()”. Elle est utilisée un peu comme des ciseaux à chaîne de caractères. Sa syntaxe est la suivante :
$texteAccueil.Substring(position du caractère de départ, nombre de caractères)
Ou, si vous voulez garder toute la chaîne à partir d’un caractère :
$texteAccueil.Substring(position du caractère de départ)
Ça m’a l’air bien compliqué tout ça…
Non, rassurez-vous, c’est beaucoup plus simple que ça en a l’air. Testez avec votre chaîne de caractères stockée dans votre variable $texteAccueil.
$texteAccueil.Substring(1)
ou
$texteAccueil.Substring(2)
Ou encore
$texteAccueil.Substring(0,2)
Vous voyez ? J’ai ici utilisé différentes méthodes présentes dans les chaînes de caractères pour :
Mettre en majuscules un texte → .ToUpper()
Le mettre en minuscules → .ToLower()
Récupérer la chaîne à partir du 2ᵉ caractère → .Substring(1) (et oui, le premier caractère des chaînes de caractères est le caractère à l’indice 0).
Récupérer la chaîne à partir du 3ᵉ caractère → .Substring(2)
Récupérer la chaîne de caractères entre le premier et le 3ᵉ caractères → .Substring(0,2)
Donc si je résume, pour avoir la première lettre de mon prénom, je pourrais faire $monPrenom.Substring(0,1), c’est bien cela ?
Exactement !
Je sens que vous commencez à vous habituer au travail sur les chaînes de caractères. Vous allez pouvoir finir ce point sur les chaînes de caractères avec une dernière notion très importante : la concaténation.
La concaténation consiste à accoler des chaînes de caractères ou autres variables entre elles pour former une nouvelle chaîne.
Créez et affectez une nouvelle variable $debutPhrase avec comme valeur “Bonjour tout”.
Créez et affectez une seconde variable $finPhrase qui aura la valeur “le monde”.
À votre avis, que se passerait-il si vous faisiez un $debutPhrase+$finPhrase ?
Je sais ! Il affichera “Bonjour tout le monde”.
Eh bien… non. Vous y êtes presque. En réalité, il affichera “Bonjour toutle monde”, sans espace entre “tout” et “le”, car il n’y a pas d’espace à la fin de vos chaînes de caractères. Ce n’est pas très agréable à lire.
Et si jamais vous vouliez écrire “Bonjour à tout le monde”, ce n’est plus un espace qu’il vous manque.
Vous pourriez passer par une 3e variable, mais ce n’est pas le plus efficace à faire. C’est dans ce genre de cas que la concaténation vous sera utile.
La concaténation de chaînes de caractères se fait en utilisant le signe “+”.
Vous pouvez tester notre exemple en écrivant ceci :
$debutPhrase+" a "+$finPhrase
Travaillez avec votre environnement
À votre avis, comment feriez-vous si vous aviez une cmdlet à faire fonctionner sur plusieurs ordinateurs différents, sans avoir à changer le nom de la machine systématiquement avant chaque exécution ?
J’imagine que le nom du PC peut être trouvé quelque part dans le système ?
Bingo ! C’est exactement comme ça qu’il faut réfléchir quand vous allez scripter. Cherchez le plus possible les informations présentes dans le système, pour éviter de devoir modifier à la main à chaque fois.
Dans le chapitre précédent, lors des explications sur le chaînage de cmdlets, vous avez pu voir qu’il y avait une variable spéciale appelée $PSItem, ou $_.
Savez-vous qu’il existe d’autres variables spéciales ?
Vous allez pouvoir découvrir maintenant des variables spéciales, qui vont dépendre du système où elles sont appelées, et plus précisément de leur environnement d’exécution.
Ces variables sont appelées variables d’environnement !
Vous pouvez lister les différentes variables d’environnement avec la cmdlet Get-ChildItem Env:
.
Vous voyez, il y en a plein, et avec des informations importantes. Dont par exemple le nom de l’ordinateur, ou de l’utilisateur connecté.
Pour les utiliser, la syntaxe est un peu différente de ce que vous avez pu voir précédemment avec les autres variables.
Dans le cas des variables d’environnement, l’appel de la variable se fait de la manière suivante :$Env:<VARIABLE>
Par exemple, vous pouvez essayer d’afficher le nom d’utilisateur :$Env:USERNAME
Je vous propose maintenant de mettre en application l’utilisation de variables, la concaténation et les variables d’environnement en essayant d’afficher le message suivant :
“Bonjour <username> connecté sur la machine <nom du pc>”
Une idée ? Allez, je vous aide. Vous pouvez mettre le message dans une variable et utiliser la syntaxe suivante pour le composer :
$messageBonjour = “Bonjour “+$Env:USERNAME+” connecté sur la machine “+$Env:COMPUTERNAME
Découvrez la gestion des modules
Avant de terminer ce chapitre, je souhaiterais vous parler de quelque chose que vous serez susceptible de rencontrer dans vos différents développements de scripts : les modules.
Un module, c’est un conteneur qui va contenir plusieurs membres. Les membres peuvent être des cmdlets ou des éléments, comme des variables, des alias ou des fonctions.
Des alias ? Vous ne nous en avez pas parlé, il me semble, non ?
Effectivement, je ne vous ai pas parlé des alias. Et pour une raison très simple : je suis là pour vous apprendre le scripting, et pour ça, j’estime qu’il est plus important de connaître les syntaxes complètes avant d’aller chercher les raccourcis, et ce, pour une question de compréhension. Vous pourrez cependant aller regarder dans la documentation de PowerShell pour découvrir les différents alias.
Des modules, vous en avez déjà plusieurs installés par défaut dans votre PowerShell.
Vous pouvez les lister avec la cmdlet suivante : Get-Module
.
Cette cmdlet sans aucun paramètre vous renvoie la liste des modules installés. Mais vous pouvez aussi ajouter un paramètre pour lister tous les modules disponibles : Get-Module -ListAvailable
.
Enfin, pour importer un module, il vous suffit d’utiliser là encore une cmdlet : Import-Module <nom du module>
.
Vous pouvez lister les commandes présentes dans le module avec la cmdlet Get-Command -Module <nom du module>
.
Exemple avec WindowsUpdate :
À vous de jouer !
Un nouveau ticket GLPI vous parvient de la part d’un client d’une petite structure, qui souhaiterait générer automatiquement un login utilisateur à partir du nom et du prénom de ce dernier.
Vous devez lui donner la liste des opérations à effectuer pour passer, par exemple, de Mike Giver à m.giver.
La solution quelques lignes plus bas !
*
*
*
*
*
*
*
*
Et voilà la solution !
#Définition d’une variable avec le nom complet
$nom = “Mac Giver”
#Récupération de la première lettre du prénom
$initialePrenom = $nom.Substring(0,1)
#Récupération du nom de famille
$nomFamille = $nom.Split(“ “)[1]
#Concaténation de la première lettre du nom avec le nom de famille
$loginGenere=$initialePrenom+”.”+$nomFamille
#On met le tout en minuscules
$loginGenere = $loginGenere.toLower()
En résumé
Les variables permettent de stocker des valeurs.
Chaque variable ne peut contenir qu’une et une seule valeur.
Une variable est composée d’un nom, d’un type et de sa donnée.
Les variables d’environnement sont différentes selon l’environnement d’exécution du script.
Un module est un package qui contient entre autres des cmdlets et des alias.
Maintenant que vous maîtrisez l’intérêt et l’usage des variables, vous allez pouvoir commencer à écrire vos premiers scripts ! Mais avant cela, testez vos acquis sur cette première partie avec une petite série de questions. Bonne chance !