Aller au contenu
Sommaire

Fiche mémo PowerShell

Fiche mémo · environ 7 min de lecture

Validé

Validé. Ce site n’exécute aucune commande. Sources

Pwsh sur macOS contre Windows PowerShell 5.1

Point5.17.x
exécutablepowershell.exepwsh
systèmesWindowsWindows, macOS, Linux
base.NET Framework.NET moderne
politique d'exécutionappliquéenon appliquée hors Windows (Unrestricted, non modifiable)
modules Windows (registre, services, WMI…)ouiabsents ou limités : tester
Terminal
$PSVersionTable.PSVersionGet-ExecutionPolicy -List
  • Contexte : session pwsh.
  • Droits : utilisateur courant.
  • Effet : lecture de la version et de la politique.
  • Vérification : la version s'affiche ; la liste des politiques par portée s'affiche.
  • Retour arrière : sans objet.

Découvrir

BesoinCommande
trouver une commandeGet-Command -Verb Get -Noun *Process*
aide avec exemplesGet-Help <cmdlet> -Examples (-Full, -Online)
conceptsGet-Help about_Pipelines
propriétés et méthodes d'un objet<commande> | Get-Member
verbes autorisésGet-Verb

Conventions

  • Nom : Verbe-Nom au singulier (Get-Process, Set-Location). Insensible à la casse.
  • Verbes sans effet : Get, Select, Where, Sort, Measure, Test, Format.
  • Verbes à effet : Set, New, Add, Rename, Move, Copy, Remove, Stop, Clear, Restart, Invoke.
  • Alias (ls, gci, %, ?) pour l'interactif ; noms complets dans un script.

Pipeline d'objets

Schéma : une cmdlet de lecture produit des objets .NET, qui traversent le tube vers un filtre (Where-Object, Select-Object, Sort-Object), puis vers un format ou un export en dernier.1. Cmdlet de lectureGet-Process, Get-ChildItem…objets .NET2. Objets (propriétés, méthodes)pas du texte à découper| tube3. Filtre et sélectionWhere-Object, Select-Object, Sort-Objectobjets restants4. Format ou export, en dernierFormat-Table, ConvertTo-Json…Format-* produit du texte d'affichage, plus des objets
Du cmdlet au format : les objets circulent, le formatage vient en dernier. Schéma pédagogique du cours.
CmdletRôleExemple
Where-ObjectfiltrerWhere-Object { $_.Length -gt 1KB }
Select-ObjectchoisirSelect-Object Name, Id -First 5
Sort-ObjecttrierSort-Object CPU -Descending
ForEach-ObjecttransformerForEach-Object { $_.Name }
Measure-Objectcompter / sommerMeasure-Object -Property Length -Sum
Group-ObjectregrouperGroup-Object Extension
Format-Table / Format-Listafficheren dernier

$_ ou $PSItem : objet courant. Comparaisons : -eq -ne -gt -lt -ge -le -like -match -in -contains -and -or -not (jamais == ni > : > écrit un fichier).

Attention : pas de Format-* avant Export-Csv ou ConvertTo-Json.

Variables et structures

BesoinSyntaxe
variable$nom = "demo"
type forcé[int]$n = 3
tableau$t = @("a","b") ; $t.Count ; $t[0]
table de hachage$h = @{ Cle = "v" } ; $h.Cle
ordre conservé[ordered]@{ ... }
objet à propriétés[pscustomobject]@{ Nom = "a"; Taille = 1 }
texte littéral / expansion'...' / "... $var ..."
forcer un tableau@(Get-ChildItem)
passer des paramètressplatting : $p = @{ Path = "." } puis Get-ChildItem @p

Fonctions et paramètres

Terminal
function Get-Exemple {    [CmdletBinding()]    param(        [Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$Nom,        [ValidateRange(1, 100)][int]$Max = 10,        [ValidateSet("a","b")][string]$Mode = "a"    )    "$Nom $Max $Mode"}
  • Contexte : session pwsh.
  • Droits : utilisateur courant.
  • Effet : déclare la fonction en mémoire, rien d'autre.
  • Vérification : Get-Command Get-Exemple la trouve ; Get-Exemple -Nom x affiche « x 10 a ».
  • Retour arrière : fermer la session.

Validation : Mandatory, ValidateNotNullOrEmpty, ValidateRange, ValidateSet, ValidateScript, ValidatePattern (liste à confirmer sur la page des paramètres avancés, non relue). Retourner des objets ; Write-Host = affichage seulement.

Erreurs

BesoinSyntaxe
rendre une erreur attrapable-ErrorAction Stop
attrapertry { ... } catch { $_.Exception.Message } finally { ... }
type préciscatch [System.IO.IOException] { ... }
arrêter volontairementthrow "message"
défaut de session$ErrorActionPreference = 'Stop'
dernière erreur$Error[0]

finally s'exécute toujours (y compris Ctrl+C, d'après la page 7.6). Ne pas masquer avec catch { } vide ou SilentlyContinue partout (peut même étouffer un throw).

Fichiers, CSV, JSON

BesoinCommandeEffet
listerGet-ChildItem -File -Recurselecture
testerTest-Path -LiteralPath <p>lecture
lireGet-Content -Raw -LiteralPath <p>lecture
écrireSet-Content, Out-File, Add-Contentécrit / écrase
CSVImport-Csv / Export-Csvlit / écrit
JSONConvertFrom-Json / ConvertTo-Json -Depth 5mémoire
supprimerRemove-Item -LiteralPath <p> -WhatIfirréversible

Valeurs lues d'un CSV : chaînes ([int]$_.Taille). -LiteralPath = pas de jokers. Préciser -Encoding utf8 pour partager avec 5.1 (à vérifier).

-WhatIf, -Confirm, ShouldProcess

BesoinSyntaxe
essai à blanc<cmdlet> ... -WhatIf
demander avant<cmdlet> ... -Confirm
supprimer la demande-Confirm:$false
dans ma fonction[CmdletBinding(SupportsShouldProcess, ConfirmImpact='High')]
garde autour du changementif ($PSCmdlet.ShouldProcess($cible, 'Opération')) { ... }
défauts$ConfirmPreference = High ; ConfirmImpact = Medium

Attention : -WhatIf n'est fiable que si la cmdlet implémente ShouldProcess ; l'héritage entre modules de script n'est pas garanti (page ShouldProcess).

Attention, effet notable. Cette commande a un effet notable. Lire le contexte, les droits et l’effet attendu indiqués après le bloc ; ne jamais l’exécuter sur un système réel sans validation, d’abord dans un environnement de test.

Terminal
Remove-Item -LiteralPath ./essai.csv -WhatIf
  • Contexte : dossier de test, fichier synthétique.
  • Droits : aucun accès en écriture requis avec -WhatIf.
  • Effet : décrit la suppression sans l'effectuer ; sans -WhatIf, la suppression est définitive.
  • Vérification : Test-Path ./essai.csv renvoie True.
  • Retour arrière : pas de corbeille.

Politique d'exécution

  • Fonction de sécurité de type « défense en profondeur », pas une frontière de sécurité (contournable en saisissant le contenu en ligne de commande).
  • Appliquée seulement sous Windows ; sur macOS : Unrestricted, non modifiable, comportement Bypass.
  • Valeurs Windows : Restricted, AllSigned, RemoteSigned (défaut), Unrestricted, Bypass, Undefined. Portées : Process, CurrentUser, LocalMachine, stratégie de groupe.
  • Ne pas copier un conseil « Set-ExecutionPolicy Bypass ».

Modules et PSGallery

BesoinCommandeRemarque
modules présentsGet-Module -ListAvailablelecture
chercherFind-Module <nom> (PowerShellGet)réseau
installerInstall-Module / Install-PSResourceexécute du code d'un tiers : lire d'abord
version précise-RequiredVersionépingler
portée-Scope CurrentUserpas de droits élevés

Risques : usurpation de nom, compte d'auteur compromis, mise à jour malveillante, dépendances. Contrôler auteur, dépôt source, date, téléchargements. Un module s'exécute avec vos droits. Précautions : bonnes pratiques générales, non issues d'une page officielle lue.

Scripts sûrs

FaireÉviter
lecture seule d'abord, puis -WhatIfécrire directement
param() typé et validévaleurs en dur
-LiteralPath-Path avec une entrée utilisateur
'...' pour un texte non fiable"..." avec une donnée externe
pwsh -File ./script.ps1 après lectureiwr ... | iex
JSON / CSV = donnéesInvoke-Expression sur une donnée externe
journaux sans secretWrite-Host d'un jeton

Attention, effet notable. Cette commande a un effet notable. Lire le contexte, les droits et l’effet attendu indiqués après le bloc ; ne jamais l’exécuter sur un système réel sans validation, d’abord dans un environnement de test.

Terminal
Get-Content -Raw ./script-telecharge.ps1
  • Contexte : lire un script non fiable avant tout ; ne jamais enchaîner avec Invoke-Expression.
  • Droits : lecture du fichier.
  • Effet : lecture seule.
  • Vérification : chercher appels réseau, suppressions, Base64.
  • Retour arrière : sans objet.

Secrets

  • Jamais en clair dans un script, un historique, un journal, une URL.
  • SecureString : protection limitée (sous Windows chiffrement en mémoire ; sur macOS à vérifier).
  • Get-Credential : saisie interactive, objet PSCredential.
  • SecretManagement (1.1.2) et SecretStore (1.0.6) : couche d'abstraction et coffre local chiffré ; modules « feature complete », dépôt archivé, corrections de sécurité seulement (page du 2026-06-22). Évaluer toute extension de coffre tierce.
  • Sur le Mac de Stéphane : Trousseau macOS via bin/secret get NOM / bin/avec-secrets de l'Orchestrator.
  • Set-Secret, Register-SecretVault modifient la configuration : seulement avec un secret factice, après avis de cyberagent pour un usage réel.

Procédure : lecture seule d'abord

décrire (Get-Command, Get-Help, Get-Member) → lire (Get-*, Test-*) → filtrer à l'écran → -WhatIf → dossier de test → vérifier le résultat → données réelles avec sauvegarde.

Sources

Consultées le 17 octobre 2026 ; documentation affichant PowerShell 7.6 (LTS), versions GitHub : v7.6.7 stable.

Points non vérifiés : voir la section correspondante du cours (pages about_Pipelines, about_Arrays, about_CommonParameters non relues, SecureString sous macOS, PSResourceGet, encodage par défaut, disponibilité des cmdlets sous macOS).