• 6 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/03/2023

Créez vos premières fonctions réutilisables pour optimiser votre travail

Vous avez pu voir comment mettre en place un script lisible, avec des bonnes pratiques comme des commentaires, l’indentation ou un cartouche. Il est temps pour vous maintenant d’apprendre à produire un code réutilisable pour optimiser votre travail de scripting.

Réutilisez votre code

Pour bien comprendre pourquoi et comment réutiliser votre code, je vous propose d’Imaginer la situation suivante : vous travaillez sur un script interactif de génération de mot de passe non sécurisé, qui demande un mot de passe source à l’utilisateur via l’utilisation d’un Read-Host 

Ce script va modifier ce mot de passe en changeant les “e” par des “3”, les “i” par des “1”, et en mettant en majuscules la première lettre de chaque mot.

#On demande le premier mot de passe
$motDePasse = Read-Host "Entre le mot de passe"
Write-Host "Vous avez entré : $motDePasse"

#On instancie la variable de travail $motDePasseModifie et on met en minuscules
$motDePasseModifie = $motDePasse.ToLower()
#On remplace les e par des 3
$motDePasseModifie = $motDePasseModifie.Replace("e", 3)
#On remplace les i par des 1
$motDePasseModifie = $motDePasseModifie.Replace("i", 1)
#On met les premières lettres en majuscules
$motDePasseModifie = (Get-Culture).TextInfo.ToTitleCase( $motDePasseModifie )

#Affichage du mot de passe
Write-Host "Voici le mot de passe modifié : $motDePasseModifie"

Maintenant, imaginez que vous décidiez de faire cette transformation sur 3 chaînes de caractères.

3 transformations  ? Ça commence à faire vraiment beaucoup de lignes de code, non ?

Eh oui ! Et je vais encore vous demander de faire un effort d’imagination.

Votre responsable de la sécurité des systèmes d’information (RSSI) vous demande maintenant de transformer les o en 0, et de remplacer les r par des 4.

En d’autres termes, passer de “mercredi je travaille mes cours openclassrooms” à “M34c43d1 J3 T4ava1ll3 M3s C0u4s 0P3nclass400ms”.

Vous aviez 3Read-Host? Vous avez donc 2 modifications à ajouter à chaque appel, c'est-à-dire 2*3=6 modifications à faire. C’est beaucoup.

$motDePasseModifie = $motDePasseModifie.Replace("i", 1)
$motDePasseModifie = $motDePasseModifie.Replace("r", 4)

Imaginez maintenant que vous n’ayez qu’une seule zone à modifier, et que ce soit le cas pour toutes les modifications à venir.

Et que si vous avez d’autres modifications à ajouter à l’avenir, pareil. Un seul endroit.

Et tout ça, très simplement, en faisant usage d’une fonction !

Une fonction ? Jamais vu ça avant.

Et si je vous disais que vous avez vu quelque chose d’équivalent dans la logique et le fonctionnement ?

Par exemple la cmdletWrite-Host? Cette commande se comporte comme le ferait une fonction. C'est-à-dire qu’elle prend un paramètre : la chaîne de caractères. Et ensuite, elle effectue une action ; dans le cas du  Write-Host  , elle affiche la chaîne dans l’invite de commandes.

Créez votre première fonction

Pour créer une fonction dans PowerShell, nous allons faire appel au mot clé suivant : function  .

Pour créer des fonctions sous PowerShell, deux syntaxes sont possibles :

function est Mot clé, Action-TheName est le Nom de la fonction, ($parametre) est le Paramètre de la fonction et le {code} est le Corps de la fonction
Option de syntaxe n°1
Option de syntaxe n°2
Option de syntaxe n°2

À ce squelette de fonction, nous allons pouvoir ajouter aussi une ligne avec un mot clé facultatif : return  , qui va nous permettre de retourner la chaîne de caractères modifiée.

Je vous propose par exemple que nous appelions notre fonction  Format-PasswordStyle  .

function Format-PasswordStyle{
    param (
        $motDePasse
        )
}

Nous allons pouvoir maintenant ajouter nos différentes transformations :

function Format-PasswordStyle{

    param (
    $motDePasse
    )

    #On affecte la variable de travail $motDePasseModifie et on met en minuscules
    $motDePasseModifie = $motDePasse.ToLower()
    #On remplace les e par des 3
    $motDePasseModifie = $motDePasseModifie.Replace("e", 3)
    #On remplace les o par des 0
    $motDePasseModifie = $motDePasseModifie.Replace("o", 0)
    #On remplace les i par des 1
    $motDePasseModifie = $motDePasseModifie.Replace("i", 1)
    #On remplace les r par des 4
    $motDePasseModifie = $motDePasseModifie.Replace("r", 4)
    #On met les premières lettres en majuscules
    $motDePasseModifie = (Get-Culture).TextInfo.ToTitleCase( $motDePasseModifie )

    return $motDePasseModifie

}

Il n’y a plus qu’à appeler notre fonction dans le script :

#On demande le premier mot de passe
$motDePasse = read-host "Entre le mot de passe"
Write-Host "Vous avez entré : $motDePasse"
#Affichage du mot de passe après transformations
Write-Host "Voici le mot de passe modifié : "$_(Format-PasswordStyle($motDePasse))

 

À vous de jouer !

Maintenant que vous avez bien compris le principe des fonctions, vous allez pouvoir essayer de l’appliquer en créant une fonction par vous-même.

Celle-ci devra écrire une ligne de texte saisie par l’utilisateur dans un fichier de log, précédée par un datetime. Ce principe est très fréquemment utilisé pour logger des actions d’un script afin de pouvoir l’analyser plus tard.

Pour vous aider un petit peu, je peux vous dire ceci :

Les datetimes peuvent être récupérées grâce à la cmdlet suivante : Get-Date  . Pensez à la mettre dans un format lisible.

Vous pouvez directement écrire dans un fichier texte avec la cmdlet  Add-Content  .

Exemple de correction :

function Add-ToLogFile($texteAAjouter) {

    $dateAction = Get-Date -Format "yyyyMMdd HH:mm:ss"
    Add-Content -Value $dateAction" -- "$texteAAjouter -Path "log.txt"
}

Add-ToLogFile("Ma ligne à ajouter")

En résumé

  • Une fonction permet d’éviter de réécrire du code avant chaque utilisation.

  • Une fonction permet de retourner une variable modifiée, ou d’exécuter des actions sans obligatoirement modifier une valeur.

  • Créer des fonctions et réutiliser du code dans vos scripts est une très bonne pratique de développement.      

  • La fonction permet de gagner du temps sur les créations et modifications de scripts, et réduit le risque d’erreur.           

Maintenant que vous savez créer des scripts interactifs et des fonctions, vous allez pouvoir aller plus loin en ajoutant de la logique fonctionnelle à ceux-ci.

Exemple de certificat de réussite
Exemple de certificat de réussite