PowerShell est un langage de script et shell de ligne de commande développé par Microsoft. Il permet d'automatiser des tâches administratives et de gérer les configurations sur les systèmes Windows. Cet outil puissant combine les fonctionnalités d'un shell traditionnel avec un langage de scripting orienté objet.
📑 Sommaire
1. Syntaxe de base
PowerShell utilise une syntaxe du type Verbe-Nom pour ses commandes (appelées cmdlets) :
Get-Process
Récupère la liste des processus en cours d'exécution.
Vous pouvez utiliser le pipe (|) pour chaîner des commandes :
Get-Service | Where-Object {$_.Status -eq "Running"}
Affiche uniquement les services dont le statut est "Running" (en cours d'exécution).
Définition de variables (commencent par $) :
$maVariable = "Bonjour"
$nombre = 42
$liste = @(1, 2, 3, 4)
$hashtable = @{Cle1 = "Valeur1"; Cle2 = "Valeur2"}
Commentaires :
# Ceci est un commentaire sur une ligne
<#
Ceci est un commentaire
sur plusieurs lignes
#>
2. Gestion des fichiers
Explorer et manipuler les fichiers et dossiers :
Get-ChildItem -Path C:\MonDossier
Liste le contenu du dossier "MonDossier" (équivalent à ls ou dir).
Copy-Item -Path source.txt -Destination destination.txt
Copie un fichier d'un emplacement à un autre.
Remove-Item -Path fichier.txt
Supprime le fichier spécifié.
Autres commandes utiles :
New-Item -Path nouveauFichier.txt -ItemType File
Move-Item -Path src.txt -Destination dest.txt
Rename-Item -Path ancien.txt -NewName nouveau.txt
Test-Path -Path C:\chemin\vers\fichier.txt
3. Modules et Snap-ins
Les modules étendent les fonctionnalités de PowerShell :
Get-Module -ListAvailable
Liste tous les modules disponibles sur le système.
Import-Module ActiveDirectory
Importe le module Active Directory pour pouvoir utiliser ses cmdlets.
Get-Command -Module ActiveDirectory
Liste toutes les commandes disponibles dans le module Active Directory.
Find-Module -Name "*Azure*"
Recherche des modules liés à Azure dans le dépôt en ligne PowerShell Gallery.
4. Exécution à distance (remoting)
PowerShell permet d'exécuter des commandes sur des machines distantes :
Enable-PSRemoting -Force
Active la fonctionnalité de remoting sur la machine locale (à exécuter en administrateur).
Enter-PSSession -ComputerName serveur
Établit une session interactive avec un ordinateur distant.
Invoke-Command -ComputerName serveur1, serveur2 -ScriptBlock { Get-Service }
Exécute une commande ou un bloc de script sur plusieurs ordinateurs distants.
$session = New-PSSession -ComputerName serveur
Invoke-Command -Session $session -ScriptBlock { ... }
Remove-PSSession -Session $session
Crée, utilise et ferme une session persistante avec un ordinateur distant.
5. Écriture de scripts
Les scripts PowerShell ont l'extension .ps1 et permettent d'automatiser des tâches complexes :
.\monScript.ps1
Exécute un script PowerShell situé dans le répertoire courant.
Set-ExecutionPolicy RemoteSigned
Modifie la politique d'exécution pour autoriser l'exécution de scripts locaux (à exécuter en administrateur).
Exemple de script simple :
# monScript.ps1
param(
[string]$Nom = "Monde"
)
Write-Host "Bonjour, $Nom !"
function Get-Carre {
param([int]$Nombre)
return $Nombre * $Nombre
}
$resultat = Get-Carre -Nombre 4
Write-Host "Le carré de 4 est $resultat"
Exécution avec paramètres :
.\monScript.ps1 -Nom "Guillaume"
6. Alias utiles
PowerShell fournit des alias pour faciliter la transition depuis d'autres shells :
ls # alias pour Get-ChildItem
cat # alias pour Get-Content
man # alias pour Get-Help
cd # alias pour Set-Location
pwd # alias pour Get-Location
rm # alias pour Remove-Item
cp # alias pour Copy-Item
mv # alias pour Move-Item
echo # alias pour Write-Output
Manipuler les alias :
Get-Alias # Liste tous les alias
Get-Alias -Name ls # Trouve la commande derrière un alias
New-Alias -Name gh -Value Get-Help # Crée un nouvel alias
7. Gestion des services
Commandes pour gérer les services Windows :
Get-Service
Liste tous les services disponibles sur le système.
Get-Service -Name "wuauserv"
Affiche les informations sur le service Windows Update.
Start-Service -Name "nom_service"
Démarre un service spécifique.
Stop-Service -Name "nom_service"
Arrête un service spécifique.
Restart-Service -Name "nom_service"
Redémarre un service spécifique.
Set-Service -Name "nom_service" -StartupType Automatic
Configure un service pour qu'il démarre automatiquement au démarrage du système.
8. Structures conditionnelles
PowerShell propose diverses structures de contrôle :
# Structure if-else
if ($x -eq 42) {
"La réponse"
} else {
"Pas encore"
}
# Structure switch
switch ($jour) {
"Lundi" { "Début de semaine" }
"Vendredi" { "Fin de semaine" }
default { "Milieu de semaine" }
}
# Boucle foreach
foreach ($item in $collection) {
# Traitement de $item
}
# Boucle for
for ($i = 0; $i -lt 10; $i++) {
# Traitement
}
# Boucle while
while ($condition) {
# Traitement
}
Opérateurs de comparaison courants :
-eq: égal à-ne: différent de-gt: supérieur à-lt: inférieur à-ge: supérieur ou égal à-le: inférieur ou égal à-like: comparaison avec jokers (*, ?)-match: correspondance via expression régulière
🎁 Bonus : Techniques avancées
Traitement en pipeline
# Enchaînement de commandes
Get-Process | Where-Object { $_.CPU -gt 10 } | Sort-Object -Property CPU -Descending | Select-Object -First 5
Création d'objets personnalisés
# Créer un objet personnalisé
$personne = [PSCustomObject]@{
Nom = "Dupont"
Prenom = "Jean"
Age = 35
}
# Utilisation
$personne.Nom
$personne | Format-Table -AutoSize
Gestion des erreurs
try {
# Code qui peut générer une erreur
$resultat = 10 / 0
} catch {
Write-Error "Une erreur s'est produite : $_"
} finally {
# Code exécuté dans tous les cas
"Opération terminée"
}
Commandes d'administration système
# Obtenir des informations système
Get-ComputerInfo
# Gérer les utilisateurs et groupes locaux
Get-LocalUser
New-LocalUser -Name "Utilisateur" -Password (ConvertTo-SecureString "MotDePasse" -AsPlainText -Force)
# Interroger le registre
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"