PowerShell — récapitulatif des commandes

Cmdlets essentielles, pipeline, fichiers, réseau, services et Active Directory.

Principe PowerShell

PowerShell manipule des objets, pas seulement du texte. Utiliser Get-Member pour voir leurs propriétés et méthodes.
Get-Service | Get-Member
Get-Service | Select-Object Name, Status
Get-Service | Where-Object Status -eq 'Running'

Aide et découverte

CommandeRôleExemple
Get-HelpAfficher l’aide d’une commande.Get-Help Get-Service -Examples
Get-CommandRechercher des cmdlets.Get-Command *NetAdapter*
Get-MemberInspecter les objets du pipeline.Get-Process | Get-Member
Get-AliasAfficher les alias.Get-Alias ls

Fichiers et texte

Get-ChildItem C:\Users -Recurse -Filter *.txt
Get-ChildItem C:\Logs -Recurse -File | Select-Object Name, FullName
Get-Content .\serveurs.txt
Get-Content .\serveurs.txt | Select-String '^DC'
(Get-Content .\serveurs.txt).Count
Set-Content .\sortie.txt 'Première ligne'
Add-Content .\sortie.txt 'Nouvelle ligne'
Copy-Item .\source .\sauvegarde -Recurse
Move-Item .\ancien.txt .\nouveau.txt
Remove-Item .\test -Recurse -WhatIf

Services, processus et événements

Get-Service
Get-Service | Where-Object Status -eq 'Running'
Get-Service Spooler | Restart-Service
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
Stop-Process -Name notepad -Force
Get-WinEvent -LogName System -MaxEvents 20
Get-WinEvent -FilterHashtable @{LogName='System'; Level=2}

Réseau

Get-NetIPConfiguration
Get-NetIPAddress -AddressFamily IPv4
Get-NetRoute -AddressFamily IPv4
Get-DnsClientServerAddress
Test-Connection serveur01 -Count 1 -Quiet
Test-NetConnection serveur01 -Port 445
Resolve-DnsName serveur01
Get-NetTCPConnection -State Listen

Active Directory

Import-Module ActiveDirectory
Get-ADUser -Filter * | Select-Object Name, SamAccountName
Get-ADUser jedi -Properties MemberOf, Enabled
Get-ADGroupMember GG_TSSR
Get-ADComputer -Filter * | Select-Object Name, OperatingSystem
Search-ADAccount -LockedOut
Unlock-ADAccount jedi
Disable-ADAccount jedi
Get-ADOrganizationalUnit -Filter *

Variables, conditions et boucles

$serveurs = Get-Content .\serveurs.txt

foreach ($serveur in $serveurs) {
    $repond = Test-Connection $serveur -Count 1 -Quiet
    if ($repond) {
        Write-Host "$serveur : OK"
    }
    else {
        Write-Warning "$serveur : KO"
    }
}

Pipeline, tri et export

Get-Service |
    Where-Object Status -eq 'Running' |
    Sort-Object DisplayName |
    Select-Object Name, DisplayName, Status

Get-Process |
    Sort-Object WorkingSet64 -Descending |
    Select-Object -First 10 Name, Id, WorkingSet64 |
    Export-Csv .\processus.csv -NoTypeInformation -Encoding UTF8

Gestion des erreurs

try {
    Get-Item C:\inexistant -ErrorAction Stop
}
catch {
    Write-Error "Échec : $($_.Exception.Message)"
}
finally {
    Write-Host "Fin du traitement"
}

🚨 Réflexe TSSR

  • Tester les commandes destructrices avec -WhatIf.
  • Filtrer tôt avec Where-Object ou directement avec les paramètres de la cmdlet.
  • Afficher uniquement les propriétés utiles avec Select-Object.
  • Utiliser -ErrorAction Stop dans un bloc try/catch.

⚠ Pièges fréquents

  • Comparer avec -eq, pas avec =.
  • Confondre $_, l’objet courant du pipeline, et une variable classique.
  • Oublier que Format-Table sert à l’affichage et ne doit pas être placé avant un export.
  • Utiliser un alias dans un script destiné à être relu ; préférer les noms complets.