0% ont trouvé ce document utile (0 vote)
2 vues32 pages

Powershell Script

Le document présente une formation sur le scripting PowerShell, abordant la structure des scripts, la conception modulaire et la logique décisionnelle. Il détaille les éléments essentiels d'un script, y compris les métadonnées d'aide, les paramètres, et les attributs de validation, ainsi que les structures de contrôle comme les boucles et les instructions conditionnelles. Enfin, il souligne l'importance de la modularité pour la réutilisabilité et la maintenance des scripts.

Transféré par

dantsik29
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues32 pages

Powershell Script

Le document présente une formation sur le scripting PowerShell, abordant la structure des scripts, la conception modulaire et la logique décisionnelle. Il détaille les éléments essentiels d'un script, y compris les métadonnées d'aide, les paramètres, et les attributs de validation, ainsi que les structures de contrôle comme les boucles et les instructions conditionnelles. Enfin, il souligne l'importance de la modularité pour la réutilisabilité et la maintenance des scripts.

Transféré par

dantsik29
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PowerShell - Scripting

Dr. Kodjo E. Francis TOSSOU

ESGIS - Licence Informatique


Plan

Script
Structure
Conception modulaire

Logique décisionnelle
Structure itérative
Boucles

PowerShell | Dr. Kodjo E. Francis TOSSOU | 2


Script
Structure
Conception modulaire

Logique décisionnelle

PowerShell | Dr. Kodjo E. Francis TOSSOU | 3


Script
Structure
Conception modulaire

Logique décisionnelle

PowerShell | Dr. Kodjo E. Francis TOSSOU | 4


Structure d’un Script PowerShell
Un script powershell ne se résume pas à une suite de commandes. Il suit
une logique segmentée :
1. En-tête de métadonnées : Aide à base de commentaires. Ce bloc de
commentaires spécial permet à PowerShell de générer une aide
automatique lorsque l’utilisateur utilisera la commande Get-Help sur
le script
2. Paramètres (Param) : Définition des paramètres qui seront spécifiés au
lancement du script ainsi que les attributs de validation du paramètre.
3. Blocs Logiques :
▶ Begin : La section qui contient les instructions à exécuter
avant le début du programme (Ex : chargement de module,
affichage d’information, etc.)
▶ Process : C’est la partie qui contient toute la logique du
code
▶ End : La section qui contient les instructions de fin du
programme
4. Gestion d’erreurs : Blocs Try/Catch impératifs.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 5


Métadonnées d’Aide (Comment-Based Help)
Ces valeurs sont placées dans un bloc de commentaires (<# ... #>) et
sont lues par la commande Get-Help. Les valeurs suivantes peuvent y être
spécifiées.
▶ .SYNOPSIS : Une description courte (une ligne) de la fonction du script.
▶ .DESCRIPTION : Une explication détaillée du fonctionnement et du but
du script.
▶ .PARAMETER [Nom] : Documente un paramètre spécifique. Il doit y
avoir une entrée par paramètre.
▶ .EXAMPLE : Fournit un exemple concret d’utilisation. On peut en
spécifier plusieurs.
▶ .INPUTS : Types d’objets que le script peut accepter via le "Pipe"
(pipeline).
▶ .OUTPUTS : Types d’objets retournés par le script.
▶ .NOTES : Informations additionnelles (auteur, version, historique des
modifications).
▶ .LINK : Nom ou URL d’une ressource connexe.
▶ .COMPONENT : Utilisé pour regrouper des scripts par technologie ou
module.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 6


Section Param()

Dans la section Param(), l’attribut [Parameter()] est utilisé pour définir


les propriétés de comportement de chaque variable d’entrée. Plusieurs
arguments peuvent être cumulés, séparés par des virgules.
▶ Mandatory (Boolean) : Si défini sur $true, le paramètre devient
obligatoire. Le script interrompra son exécution pour demander la
valeur à l’utilisateur si elle est manquante.
▶ Position (Integer ) : Permet de spécifier l’emplacement du paramètre
dans la ligne de commande. Cela permet d’utiliser le script sans
nommer explicitement le paramètre (ex : passer directement la valeur
au rang 0).
▶ ParameterSetName (String) : Permet de rattacher le paramètre à un
jeu de paramètres spécifique. C’est essentiel pour créer des
paramètres mutuellement exclusifs.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 7


Section Param() - 2

Dans la section Param(), l’attribut [Parameter()] est utilisé pour définir


les propriétés de comportement de chaque variable d’entrée. Plusieurs
arguments peuvent être cumulés, séparés par des virgules.
▶ ValueFromPipeline (Boolean) : Autorise le paramètre à recevoir
l’intégralité de l’objet envoyé via le pipeline (|).
▶ ValueFromPipelineByPropertyName (Boolean) : Permet au
paramètre d’accepter une valeur provenant d’une propriété de l’objet du
pipeline portant exactement le même nom que le paramètre.
▶ HelpMessage (String) : Définit le message d’aide succinct qui s’affiche
si l’utilisateur ne renseigne pas un paramètre obligatoire lors de
l’exécution.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 8


Attributs de validation
Ces métadonnées permettent de restreindre les valeurs acceptées avant
même que le code du script ne soit exécuté, agissant comme un premier
pare-feu.
▶ [ValidateNotNullOrEmpty()] : Rejette les valeurs nulles ou les chaînes
de caractères vides.
▶ [ValidateSet("Val1", "Val2")] : Limite le choix à une liste prédéfinie
(crée une liste déroulante en auto-complétion).
▶ [ValidateCount(min, max)] : Spécifie le nombre minimal et maximal
d’éléments pour un tableau.
▶ [ValidateRange(min, max)] : Restreint une valeur numérique dans une
plage spécifique.
▶ [ValidatePattern("Regex")] : Vérifie que la valeur correspond à une
expression régulière (ex : format d’IP).
▶ [ValidateScript({ . . .})] : Exécute un bloc de code personnalisé pour
valider la donnée ($true/$false).

PowerShell | Dr. Kodjo E. Francis TOSSOU | 9


Exemple type d’un script powershell
<#
.SYNOPSIS
Analyseur de logs de sécurité.
.DESCRIPTION
...
.PARAMETER LogPath
...
#>
Param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$LogPath,

[Parameter(ParameterSetName="Admin")]
# Le switch ne prend pas de valeur mais active la variable
[switch]$Force
)
Begin { Write-Host "Initialisation..." }
Process { # Logique principale }
End { Write-Host "Nettoyage..." }

PowerShell | Dr. Kodjo E. Francis TOSSOU | 10


Les extensions de fichiers PowerShell

Il existe trois extensions principales à connaître :


1. .ps1 - PowerShell Script : Le script exécutable standard.
2. .psm1 - PowerShell Module : Module PowerShell
(bibliothèque de fonctions réutilisables).
3. .psd1 - PowerShell Data : Manifeste de module (données
de version, auteur, dépendances).
4. .ps1xml - PowerShell XML : Définition de types ou de
formats d’affichage personnalisés.
NB : Un fichier .ps1 n’est pas "exécutable" par double-clic par
défaut, une mesure de sécurité native de Windows.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 11


Méthodes d’exécution et Sécurité

Comment lancer un script selon le contexte ?


▶ Console interactive :
./MonScript.ps1
▶ Depuis CMD :
[Link] -File script.ps1
▶ Bypass de restriction (Audit) :
powershell -ExecutionPolicy Bypass -File script.ps1
Attention : L’Execution Policy n’est pas une barrière de sécurité
mais une protection contre l’exécution accidentelle.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 12


Script
Structure
Conception modulaire

Logique décisionnelle

PowerShell | Dr. Kodjo E. Francis TOSSOU | 13


Pourquoi la conception Modulaire ?
Pourquoi coder une valeur en dur (ex : $Seuil = 90) est une
erreur :
▶ Rigidité : Le script ne fonctionne que pour un seul cas
d’usage.
▶ Risque d’erreur : Modifier le code source à chaque
changement de serveur augmente le risque de briser la
logique interne.
▶ Maintenance impossible : Si 50 scripts utilisent le même
chemin de log "hardcodé" et que le serveur change, vous
devez modifier 50 fichiers.

Règle d’or
Si vous devez ouvrir l’éditeur de code pour changer une valeur,
votre script n’est pas modulaire.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 14


Le script comme "Boîte Noire"

La modularité sépare la logique des données.


▶ Entrées (Paramètres) : Le "Quoi" et le "Où" (ex :
-Serveur, -Seuil).
▶ Logique (Le Code) : Le "Comment". Il reste identique quel
que soit l’environnement.
▶ Sorties (Résultats) : Logs, rapports, actions système.

Avantage : Le même script peut être utilisé en Production, en


Test ou par différents départements sans modification interne.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 15


Exemple

BON (Modulaire)
MAUVAIS (Hardcoded) param(
$Dest = "admin@[Link]" [string]$AlertEmail,
if ($Space -lt 10) { [int]$MinSpace = 15
Send-Mail -To $Dest \ )
-Body "Full" if ($Space -lt $MinSpace) {
} Send-Mail -To $AlertEmail ...
}

▶ Réutilisabilité : Le script de droite devient un outil


standard (Toolbox) qui peut être utilisé dans différent
contexte.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 16


Script

Logique décisionnelle
Structure itérative
Boucles

PowerShell | Dr. Kodjo E. Francis TOSSOU | 17


Script

Logique décisionnelle
Structure itérative
Boucles

PowerShell | Dr. Kodjo E. Francis TOSSOU | 18


Logique décisionnelle : L’instruction if

La structure if permet de diriger le flux du script selon une


condition booléenne.
▶ La condition se définie entre (...).
▶ Ex : ($a -gt 10).
▶ les instructions à exécuter sont définies entre accolades {
...}.

Exemple
if ($FreeSpace -lt 5GB) {
Write-Warning "Espace critique"
}
else { Write-Host "Espace suffisant" }

PowerShell | Dr. Kodjo E. Francis TOSSOU | 19


Logique complexe : L’imbrication elseif

Quand une décision comporte plus de deux issues, on utilise


elseif.
▶ Logique séquentielle : PowerShell teste les conditions de
haut en bas. Dès qu’une est vraie, il exécute le bloc et sort
de la structure.
▶ Importance de l’ordre : Les conditions les plus
spécifiques doivent être placées avant les conditions
générales.
▶ Rappel sur les valeurs possibles pour les opérateurs :
▶ -eq (égal), -ne (différent).
▶ -gt / -lt (plus grand / plus petit).
▶ -like / -match (comparaison de texte / Regex).

PowerShell | Dr. Kodjo E. Francis TOSSOU | 20


L’alternative switch

Le switch est idéal pour comparer une seule variable à une


liste de valeurs possibles.
▶ Avantages : Plus lisible, plus rapide à exécuter.
▶ Usage type : Gestion des menus, codes d’erreur HTTP,
types d’objets.

Exemple
switch ($Valeur) {
"Valeur1" { Action1 }
"Valeur2" { Action2 }
Default { ActionParDefaut }
}

PowerShell | Dr. Kodjo E. Francis TOSSOU | 21


L’alternative switch

Le switch possède des paramètres avancés pour traiter des


fichiers entiers.
▶ -File : Lit le fichier ligne par ligne (très économe en RAM).
▶ -Regex : Permet d’extraire des patterns complexes dans
chaque ligne.
▶ -Wildcard : Utilise les caractères * et ?.

Exemple
switch -Regex -File "C:\Logs\[Link]" {
"^ERROR" { $ErrorCount++ }
"Failed password" { $FailedLogins++ }
}

PowerShell | Dr. Kodjo E. Francis TOSSOU | 22


Script

Logique décisionnelle
Structure itérative
Boucles

PowerShell | Dr. Kodjo E. Francis TOSSOU | 23


La structure while

La boucle while exécute un bloc de code tant qu’une


condition est vraie.
▶ Évaluation initiale : La condition est testée avant chaque
exécution. Si elle est fausse dès le début, le code n’est
jamais exécuté.
▶ Usage type : Vérifier la disponibilité d’une ressource avant
d’agir.

Syntaxe
while (<condition>) { <code à exécuter> }

PowerShell | Dr. Kodjo E. Francis TOSSOU | 24


La structure do-until

La boucle do-until exécute un bloc jusqu’à ce qu’une


condition devienne vraie.
▶ Évaluation finale : La condition est testée après
l’exécution du bloc. Le code est donc exécuté au moins
une fois.
▶ Différence sémantique : C’est l’inverse du while. On
attend un changement d’état (ex : un service qui démarre).

Syntaxe
do { <code à exécuter> } until (<condition>)

PowerShell | Dr. Kodjo E. Francis TOSSOU | 25


Exemple : Automatiser l’attente d’un service

Dans un script de déploiement, il est fréquent de devoir


attendre qu’un service soit Running avant de continuer.
Attente du service Spooler
do {
Write-Host "En attente du service..."
Start-Sleep -Seconds 2
$status = (Get-Service -Name "Spooler").Status
} until ($status -eq "Running")

Write-Host "Le service est pret !"

PowerShell | Dr. Kodjo E. Francis TOSSOU | 26


La boucle foreach

L’itération permet d’appliquer la même logique décisionnelle à


une collection d’objets.
▶ Concept : On définit une variable temporaire (itérateur) qui
prendra successivement la valeur de chaque élément de la
liste.
▶ Terminologie :
▶ Collection : Le groupe (ex : $Serveurs).
▶ Élément : L’unité actuelle (ex : $Serveur).

Exemple
foreach ($Srv in $List) { Test-Connection $Srv }

PowerShell | Dr. Kodjo E. Francis TOSSOU | 27


Utilité de Continue et Break
Parfois, la logique décisionnelle doit influencer la boucle
elle-même.
▶ Continue : Arrête l’exécution pour l’élément actuel et
passe immédiatement au suivant (ex : passer outre un
serveur hors-ligne).
▶ Break : Arrête l’exécution de la boucle entière (ex : on a
trouvé l’information recherchée, inutile de continuer ).

Combinaison Logique/Itérative
function Update-User {
param($User)
...
}
foreach ($U in $Users) {
if ($[Link]) { continue }
Update-User $U
}

PowerShell | Dr. Kodjo E. Francis TOSSOU | 28


Utilisation de ForEach-Object en Script
Dans un script, le cmdlet est souvent utilisé pour transformer
ou filtrer des données provenant d’un fichier ou d’une base de
données.
▶ Lisibilité : Contrairement au mode console, on utilise le
nom complet (pas l’alias %) et on indente le code.
▶ Chaînage : On peut placer d’autres cmdlets après le bloc
(ex : Sort-Object ou Export-Csv).

Exemple
Get-Content -Path "./[Link]" |
ForEach-Object {
$Name = $_.Trim()
# Instruction
New-ADUser -Name $Name -Description "Créé via script"
}

PowerShell | Dr. Kodjo E. Francis TOSSOU | 29


Le pattern "Collecteur" (Begin/Process/End)
Cette structure permet de gérer un état (compteur, log) tout au
long du pipeline sans polluer l’espace mémoire global.
Exemple
Get-ChildItem -Path "C:\Data" -Recurse |
ForEach-Object -Begin {
$GlobalSize = 0
Write-Host "Debut du calcul..."
}
-Process {
$GlobalSize += $_.Length
# On peut emettre un objet vers le bloc suivant
$_ # ou $PSItem
}
-End {
Write-Host "Taille totale : $($GlobalSize / 1GB) Go"
}

PowerShell | Dr. Kodjo E. Francis TOSSOU | 30


Gestion des variables et paramètres

▶ Accès externe : Le bloc ForEach-Object a accès aux


variables définies plus haut dans le script (ex : un chemin
de log ou un switch -Force).
▶ Sûreté : Attention à la variable automatique $_. Si vous
imbriquez deux ForEach-Object, le $_ du bloc interne
écrasera celui du bloc externe.

Bonne pratique
Si vous devez imbriquer deux boucles, utilisez l’instruction
foreach ($item in $list) pour la boucle externe afin de
nommer clairement vos variables et éviter les conflits de $_.

PowerShell | Dr. Kodjo E. Francis TOSSOU | 31


Bonnes pratiques : Éviter la boucle infinie

Une attente de service peut bloquer un script indéfiniment si le


service échoue à démarrer.
▶ Le Timeout : Il faut toujours implémenter un compteur ou
une limite de temps.
▶ Variables clés :
▶ $MaxRetry : Nombre maximal de tentatives.
▶ $Counter : Incrémenté à chaque passage.

Exemple
while ($[Link] -ne "Running" -and $Counter -lt 10) {
$Counter++
Start-Sleep -s 5
}

PowerShell | Dr. Kodjo E. Francis TOSSOU | 32

Vous aimerez peut-être aussi