Voici un mini-cours clair, progressif et directement exploitable sur la syntaxe PowerShell (.ps1)👇
PowerShell est un shell moderne orienté objets, conçu par Microsoft. Contrairement à un terminal classique (bash, cmd), il manipule des objets .NET plutôt que du simple texte, ce qui le rend très puissant pour l’administration système et l’automatisation.
Un fichier .ps1 est simplement un script PowerShell.
.ps1Un script PowerShell est une suite d’instructions exécutées de haut en bas :
## Ceci est un commentaire
Write-Output "Bonjour le monde"
Write-Output "Texte"
Write-Host "Texte en couleur"
Exemple :
Write-Host "Hello" -ForegroundColor Green
Déclaration :
$nom = "Julien"
$age = 30
Utilisation :
Write-Output "Bonjour $nom"
⚠️ Toujours avec $
PowerShell est typé dynamiquement, mais tu peux préciser :
[string]$nom = "Julien"
[int]$age = 30
[bool]$ok = $true
#+ # addition
#- # soustraction
#* # multiplication
#/ # division
Comparaisons :
#-eq # égal
#-ne # différent
#-gt # >
#-lt # <
#-ge # >=
#-le # <=
Exemple :
if ($age -gt 18) {
Write-Output "Majeur"
}
if ($note -ge 50) {
Write-Output "Réussi"
} elseif ($note -ge 40) {
Write-Output "Échec léger"
} else {
Write-Output "Échec"
}
$i = 0
while ($i -lt 5) {
Write-Output $i
$i++
}
for ($i = 0; $i -lt 5; $i++) {
Write-Output $i
}
$liste = 1,2,3,4
foreach ($element in $liste) {
Write-Output $element
}
$fruits = @("Pomme", "Banane", "Orange")
Write-Output $fruits[0]
Ajouter :
$fruits += "Poire"
PowerShell utilise des commandes appelées cmdlets :
Format :
Verbe-Nom
Exemples :
Get-Process
Get-Service
Get-ChildItem
👉 Exemple concret :
Get-ChildItem
= liste les fichiers (équivalent dir)
Get-Process | Where-Object {$_.CPU -gt 100}
| = envoie le résultat à la commande suivante$_ = objet courantfunction Dire-Bonjour {
param($nom)
Write-Output "Bonjour $nom"
}
Dire-Bonjour "Julien"
$nom = Read-Host "Ton nom ?"
Write-Output "Bonjour $nom"
Créer un fichier :
New-Item "test.txt"
Lire :
Get-Content "test.txt"
Écrire :
"Hello" | Out-File "test.txt"
.ps1Par défaut, les scripts sont bloqués.
Autoriser :
Set-ExecutionPolicy RemoteSigned
.\mon_script.ps1
## Demande le nom
$nom = Read-Host "Comment tu t'appelles ?"
## Condition
if ($nom -eq "") {
Write-Output "Nom vide"
} else {
Write-Output "Bonjour $nom"
}
## Boucle
for ($i = 1; $i -le 3; $i++) {
Write-Output "Tour $i"
}
$ → variablesVerbe-Nom → cmdlets| → pipeline$_ → élément courantTrès bonne question — c’est fondamental en PowerShell, surtout dès que tu touches au pipeline ou à l’automatisation.
Write-Host et Write-OutputWrite-Output → envoie des données dans le pipelineWrite-Host → écrit directement dans la console (affichage uniquement)👉 Autrement dit :
| Cmdlet | Destination | Utilisable dans pipeline |
|---|---|---|
| Write-Output | Pipeline (objet) | ✅ Oui |
| Write-Host | Écran (console) | ❌ Non |
Write-Output (à privilégier)Write-Output "Hello"
➡️ Envoie une valeur exploitable
Write-Output "Hello" | Get-Member
👉 Ça fonctionne, car "Hello" est passé dans le pipeline
function Get-Nom {
Write-Output "Julien"
}
$nom = Get-Nom
✔️ $nom contient "Julien"
Write-Host (affichage uniquement)Write-Host "Hello"
➡️ Affiche dans la console, mais ne retourne rien
Write-Host "Hello" | Get-Member
❌ Ne fonctionne pas → rien ne passe dans le pipeline
function Get-Nom {
Write-Host "Julien"
}
$nom = Get-Nom
❌ $nom est vide
Write-Host "Hello" -ForegroundColor Green
✔️ Couleur possible ❌ Non exploitable
Write-Output "Hello"
✔️ Exploitable ❌ Pas de couleur
👉 Write-Output = données 👉 Write-Host = affichage
Write-Host "Résultat : $result"
Write-Output $result
👉 et éventuellement :
Write-Host "Résultat : $result"
pour du debug / UI
Write-Host ?Uniquement pour :
Write-Output ?Toujours pour :
Write-Output → logique / données / pipelineWrite-Host → UI / affichage uniquement