Cheatsheets

PowerShell

Aide-mémoire PowerShell : cmdlets, pipeline et objets, filtres, boucles, fonctions, fichiers et administration Active Directory.

Découverte et aide

PowerShell manipule des objets (pas du texte). Les commandes suivent le schéma Verbe-Nom (ex. Get-Process, Set-Item).

Commande Rôle
Get-Command *service* chercher une cmdlet
Get-Help Get-Process -Examples aide + exemples d'une cmdlet
Get-Member lister propriétés et méthodes d'un objet
Get-Alias voir les alias (ls, cd, cat…)
Update-Help télécharger l'aide à jour
Get-Process | Get-Member          # que puis-je faire sur un processus ?
Get-Help Get-ADUser -Online       # ouvre la doc dans le navigateur

Variables et types

  • Déclarer : $nom = "Alice" · typer : [int]$age = 30.
  • Automatiques : $_ (objet courant du pipeline), $? (succès de la dernière commande), $PSVersionTable, $args.
  • Tableaux : $t = 1,2,3 · $t[0] · ajouter $t += 4.
  • Table de hachage : $h = @{ nom = "Alice"; age = 30 } · $h.nom.
  • $null, $true, $false.

Opérateurs

Les opérateurs sont textuels, précédés d'un tiret (pas de ==).

Catégorie Opérateurs
Comparaison -eq -ne -lt -le -gt -ge
Logique -and -or -not (ou !)
Texte -like (jokers *), -match (regex), -replace, -split, -join
Ensemble -contains, -in
"srv-01" -like "srv-*"          # True
"a,b,c" -split ","              # a  b  c
$mots -join " "                 # recolle un tableau en chaîne

Le pipeline et les objets

Le | passe des objets d'une cmdlet à l'autre ; $_ désigne l'objet courant.

Get-Service |
  Where-Object { $_.Status -eq "Running" } |
  Select-Object Name, StartType |
  Sort-Object Name

Filtrer, trier, sélectionner

Cmdlet Rôle
Where-Object { $_.X -gt 5 } filtrer (alias ?)
Select-Object Name, Id choisir des colonnes
Select-Object -First 5 limiter
Sort-Object X -Descending trier
ForEach-Object { … } agir sur chaque objet (alias %)
Measure-Object -Sum compter / additionner
Group-Object X regrouper
Get-ChildItem C:\ -File |
  Sort-Object Length -Descending |
  Select-Object Name, Length -First 5

Conditions et boucles

if ($x -gt 5) { "grand" } elseif ($x -eq 5) { "pile" } else { "petit" }

switch ($jour) {
  "Lun" { "début" }
  "Ven" { "presque !" }
  default { "milieu" }
}

foreach ($i in 1..5) { $i }          # 1..5 = plage
while ($n -lt 3) { $n++ }
do { $n-- } while ($n -gt 0)

Fonctions

function Get-Cube {
  param(
    [Parameter(Mandatory)][int]$Nombre
  )
  return $Nombre * $Nombre * $Nombre
}

Get-Cube -Nombre 3        # 27
  • Les paramètres se déclarent avec param(...) ; [Parameter(Mandatory)] les rend obligatoires.
  • Une fonction renvoie tout ce qu'elle émet (pas seulement return).

Fichiers et système

Cmdlet Équivalent Rôle
Get-ChildItem ls / dir lister
Get-Content cat lire un fichier
Set-Content / Add-Content écrire / ajouter
Copy-Item / Move-Item cp / mv copier / déplacer
Remove-Item rm supprimer
Test-Path vérifier l'existence
Get-Service / Get-Process services / processus
Get-Content journal.log | Select-String "ERROR"     # ~ grep
Get-Service | Where-Object Status -eq "Stopped"

Chaînes et formatage

  • Interpolation (guillemets doubles) : "Bonjour $nom, il est $(Get-Date -Format HH:mm)".
  • Guillemets simples = littéral (pas d'interpolation).
  • Formater une sortie : ... | Format-Table, Format-List, Out-GridView.
  • Exporter : Export-Csv data.csv -NoTypeInformation, ConvertTo-Json, Out-File.

Active Directory

Prérequis : Import-Module ActiveDirectory (outils RSAT / rôle AD DS).

Utilisateurs

New-ADUser -Name "J Test" -SamAccountName jtest `
  -AccountPassword (Read-Host -AsSecureString) -Enabled $true
Get-ADUser -Filter * -SearchBase "OU=RH,DC=entreprise,DC=local"
Set-ADUser jtest -Department "RH"
Enable-ADAccount jtest ; Disable-ADAccount jtest
Set-ADAccountPassword jtest -Reset

Groupes

New-ADGroup -Name "GG_RH" -GroupScope Global -GroupCategory Security
Add-ADGroupMember "GG_RH" jtest
Get-ADGroupMember "GG_RH"

OU, ordinateurs, domaine

New-ADOrganizationalUnit -Name "RH" -Path "DC=entreprise,DC=local"
Move-ADObject -Identity "<DN>" -TargetPath "OU=RH,DC=entreprise,DC=local"
Get-ADComputer -Filter * ; Get-ADDomain ; Get-ADForest
  • Les mots de passe sont des SecureString.
  • -Path / -SearchBase attendent un DN (Distinguished Name).
  • Adopter une convention de nommage des groupes (GG_, GDL_).

Bonnes pratiques et pièges

  • Opérateurs textuels (-eq, pas ==).
  • Autoriser les scripts : Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
  • Toujours privilégier les cmdlets (objets) au parsing de texte.
  • ` (accent grave) = caractère de continuation de ligne.
  • Lancer PowerShell en administrateur pour les tâches système / AD.
  • Explorer un objet inconnu avec Get-Member avant de scripter.

Pour les fondamentaux (objets, pipeline), voir les mémos SCR-05 à SCR-07 et WIN-15.