← Retour au portail

Fiche 4 - PowerShell — Commandes essentielles pour l'administration

Maîtriser PowerShell pour administrer Windows Server : cmdlets, pipeline, scripts, gestion AD et services.

Intermédiaire — SISR 2ème année ⏱️ 25 min 📁 Windows Server

🎯 Objectifs de la fiche

  1. Bases de PowerShell — Cmdlets, pipeline, aide, alias
  2. Navigation et fichiers — Get-ChildItem, Copy-Item, New-Item
  3. Gestion des services et processus — Get-Service, Start-Service, Get-Process
  4. Active Directory avec PowerShell — Get-ADUser, New-ADUser, Add-ADGroupMember
  5. Scripts PowerShell — Variables, conditions, boucles, fonctions

Prérequis

Windows Server 2022 ou Windows 10/11. PowerShell 5.1 (inclus) ou PowerShell 7+. Pour les commandes AD, le module ActiveDirectory doit être installé.

1. Bases de PowerShell

Les commandes PowerShell s'appellent des cmdlets. Elles suivent la convention Verbe-Nom (Get-Item, Set-Service, New-User...).

# Obtenir de l'aide sur une cmdlet
Get-Help Get-Service
Get-Help Get-Service -Examples
Get-Help Get-Service -Full

# Mettre à jour l'aide
Update-Help

# Lister toutes les cmdlets disponibles
Get-Command
Get-Command -Verb Get      # Toutes les cmdlets Get-*
Get-Command -Noun Service  # Toutes les cmdlets *-Service

# Alias courants
ls  = Get-ChildItem
cd  = Set-Location
cat = Get-Content
cls = Clear-Host

2. Navigation et gestion des fichiers

CmdletAliasAction
Get-ChildItemls, dir, gciLister le contenu d'un répertoire
Set-LocationcdChanger de répertoire
Get-LocationpwdAfficher le répertoire courant
Copy-Itemcp, copyCopier un fichier ou dossier
Move-Itemmv, moveDéplacer ou renommer
Remove-Itemrm, delSupprimer
New-ItemniCréer un fichier ou dossier
Get-Contentcat, typeLire le contenu d'un fichier
Set-ContentÉcrire dans un fichier (écrase)
Add-ContentAjouter à la fin d'un fichier
# Exemples pratiques
Get-ChildItem C:\Windows\System32 -Filter *.exe | Measure-Object
New-Item -Path C:\temp -ItemType Directory
Copy-Item -Path C:\source\fichier.txt -Destination D:\backup\
Get-Content C:\Windows\System32\drivers\etc\hosts

3. Pipeline — Chaîner les cmdlets

# Le pipeline (|) passe la sortie d'une cmdlet en entrée de la suivante

# Lister les 10 processus les plus gourmands en RAM
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10

# Trouver tous les services arrêtés
Get-Service | Where-Object {$_.Status -eq "Stopped"}

# Exporter en CSV
Get-Service | Export-Csv -Path C:\services.csv -NoTypeInformation

# Filtrer les fichiers de plus de 100 Mo
Get-ChildItem C:\ -Recurse -File | Where-Object {$_.Length -gt 100MB}

4. Gestion des services et processus

CmdletAction
Get-ServiceLister les services
Get-Service -Name ssh*Chercher un service par nom
Start-Service nomDémarrer un service
Stop-Service nomArrêter un service
Restart-Service nomRedémarrer un service
Set-Service nom -StartupType AutomaticConfigurer le démarrage auto
Get-ProcessLister les processus
Stop-Process -Name notepadTuer un processus par nom
Stop-Process -Id 1234Tuer un processus par PID

5. Active Directory avec PowerShell

# Importer le module AD (si pas chargé automatiquement)
Import-Module ActiveDirectory

# Lister tous les utilisateurs
Get-ADUser -Filter *

# Rechercher un utilisateur spécifique
Get-ADUser -Identity adupont -Properties *

# Lister les utilisateurs d'une UO
Get-ADUser -Filter * -SearchBase "OU=Etudiants,DC=lycee,DC=local"

# Créer un utilisateur
New-ADUser -Name "Alice Dupont" `
           -SamAccountName "adupont" `
           -UserPrincipalName "adupont@lycee.local" `
           -Path "OU=Etudiants,DC=lycee,DC=local" `
           -AccountPassword (ConvertTo-SecureString "P@ssword123" -AsPlainText -Force) `
           -Enabled $true

# Désactiver un compte
Disable-ADAccount -Identity adupont

# Ajouter un utilisateur à un groupe
Add-ADGroupMember -Identity "GRP-Etudiants" -Members adupont

# Lister les membres d'un groupe
Get-ADGroupMember -Identity "GRP-Etudiants"

# Ordinateurs du domaine
Get-ADComputer -Filter * | Select Name, OperatingSystem

6. Script PowerShell — Structure de base

# verification-serveur.ps1

# Variables
$Serveur = "SRV-AD-01"
$Services = @("ADWS", "DNS", "Netlogon", "W32Time")

# Boucle ForEach
foreach ($Service in $Services) {
    $Etat = Get-Service -Name $Service -ErrorAction SilentlyContinue
    if ($Etat.Status -eq "Running") {
        Write-Host "$Service : OK" -ForegroundColor Green
    } else {
        Write-Host "$Service : ARRETE" -ForegroundColor Red
    }
}

# Condition
$Disque = Get-PSDrive C
$PourcentUsed = [math]::Round(($Disque.Used / ($Disque.Used + $Disque.Free)) * 100)
if ($PourcentUsed -gt 80) {
    Write-Warning "Disque C: à $PourcentUsed% !"
}
💡 En PowerShell, le backtick (`) est le caractère de continuation de ligne (équivalent de \ en bash). Utilisez-le pour les longues commandes.
Quelle est la convention de nommage des cmdlets PowerShell ?
  • Verbe_Nom (Get_Service)
  • Verbe-Nom (Get-Service)
  • nom.verbe (service.get)
  • Majuscules uniquement

✅ Réponse : Verbe-Nom (Get-Service)

Que fait le pipeline (|) en PowerShell ?
  • Exécute deux commandes en parallèle
  • Passe la sortie d'une cmdlet en entrée de la suivante
  • Redirige la sortie vers un fichier
  • Sépare deux commandes indépendantes

✅ Réponse : Passe la sortie d'une cmdlet en entrée de la suivante

Quelle cmdlet liste tous les services arrêtés ?
  • Get-Service -Status Stopped
  • Get-Service | Where-Object {$_.Status -eq 'Stopped'}
  • List-Service --stopped
  • Les réponses A et B sont correctes

✅ Réponse : Les réponses A et B sont correctes

Quelle cmdlet crée un utilisateur Active Directory ?
  • Add-ADUser
  • Create-ADUser
  • New-ADUser
  • Set-ADUser

✅ Réponse : New-ADUser

Comment exécuter un script PowerShell nommé script.ps1 ?
  • run script.ps1
  • .\script.ps1
  • powershell script.ps1
  • exec script.ps1

✅ Réponse : .\script.ps1