TP1re année20 livrablesQuiz corrigé
Le terminal (PowerShell)
Arrête de tout faire à la souris. Tu vas piloter ton PC en tapant des commandes — comme un vrai technicien.
Par Josselyn C., prof de BTS SIO. Publié le , mis à jour le .
- Objectif
- naviguer, créer, copier, déplacer et supprimer des fichiers en ligne de commande
- On manipule
- ton poste Windows directement — rien à installer
- Pré-requis
- aucun. On part de « c'est quoi un terminal ? »
- Pour qui
- SLAM et SISR, 1re année
- Durée
- environ 5 h
Compétences : C1.1 Gérer le patrimoine informatique, C1.5 Mettre à disposition des utilisateurs un service informatique
Aucune commande de ce playbook n'est dangereuse. On s'entraîne dans un dossier à toi.
Avant de commencer
Pourquoi apprendre le terminal
Tu sais déjà cliquer dans Windows. Alors pourquoi taper des commandes ? Parce qu'un technicien qui maîtrise le terminal va 10 fois plus vite, peut automatiser ce qui est répétitif, et travaille sur des serveurs qui n'ont pas d'écran (donc pas de souris). C'est une compétence de base du métier — et c'est aussi le premier pas vers le code.
Ce que tu sauras faire à la fin
| Commande | Tu sauras… |
|---|---|
Get-Location / Set-Location | savoir où tu es, te déplacer entre les dossiers |
Get-ChildItem | lister ce qu'il y a dans un dossier |
New-Item | créer des dossiers et des fichiers |
Copy-Item / Move-Item | copier, déplacer et renommer |
Get-Content / Remove-Item | lire un fichier, supprimer proprement |
Comment travailler ce playbook (seul)
Trois touches « bizarres » que tu vas devoir taper
Avant de commencer, repère ces trois caractères sur ton clavier — sur un clavier français (AZERTY) ils ne sont pas évidents, et c'est le blocage n°1 des débutants :
| Symbole | Nom | Comment le taper (clavier FR) |
|---|---|---|
\ | antislash (barre oblique inversée) | Alt Gr + 8 (la touche du 8 en haut) |
| | barre verticale (le « pipe ») | Alt Gr + 6 (la touche du 6 en haut) |
~ | tilde | Alt Gr + 2, puis appuie sur Espace (sinon il ne s'affiche qu'avec la lettre suivante) |
0. C'est quoi un terminal ?
Le terminal (aussi appelé « console » ou « ligne de commande ») est une fenêtre où tu écris des ordres à l'ordinateur, au lieu de cliquer. Tu tapes une commande, tu appuies sur Entrée, la machine l'exécute et te répond par du texte.
Sous Windows, le terminal moderne s'appelle PowerShell. C'est lui qu'on va utiliser.
Le vocabulaire qu'on va répéter
| Mot | Traduction |
|---|---|
Commande | un ordre que tu tapes (ex. « liste les fichiers ») |
Dossier courant | l'endroit où tu te trouves en ce moment dans l'arborescence |
Chemin (path) | l'adresse d'un fichier ou dossier, ex. C:\Users\toi\Documents |
Argument | ce qu'on donne à une commande pour préciser (ex. le nom du dossier à créer) |
Quelle version de PowerShell as-tu ?
Windows est livré avec deux versions de PowerShell. Ce n'est pas la même chose, et ça change quelques comportements :
| Caractéristique | PowerShell 5.1 (classique) | PowerShell 7.x (moderne) |
|---|---|---|
| Fenêtre | Fond bleu nuit, titre « Windows PowerShell » | Fond noir, titre « PowerShell 7 » |
| Fourni avec Windows | Oui (Windows 10 / 11) | Non — à installer séparément |
| Prompt | PS C:\> | PS C:\> (identique) |
| Encodage des fichiers créés | UTF-16 LE avec BOM par défaut | UTF-8 par défaut |
| Compatibilité modules | Excellent (Windows .NET Framework) | Excellent + multi-plateforme |
| Commande pour vérifier | $PSVersionTable.PSVersion → affiche 5.1.x ou 7.x.x |
PowerShell vs Invite de commandes (cmd) vs Bash — lequel utiliser ?
| Outil | Système | Pour quoi | Commandes clés |
|---|---|---|---|
| PowerShell | Windows | Administration Windows, scripts, manipulation de fichiers, automation | Get-ChildItem, Set-Location, Where-Object |
| cmd (Invite de commandes) | Windows | Scripts batch anciens, compatibilité logiciels legacy. À éviter pour un usage moderne. | dir, copy, del |
| Bash | Linux / macOS | Serveurs web, scripts DevOps, Docker, tout ce qui tourne sur un serveur | ls, cd, grep, chmod |
Où PowerShell est utilisé en vrai — l'échelle pro
PowerShell n'est pas un gadget de cours. En entreprise, c'est un outil de premier plan :
| Domaine | Usage concret | Gain réel par rapport aux clics |
|---|---|---|
| Sysadmin Windows / Active Directory | Créer 200 comptes utilisateurs, réinitialiser des mots de passe en masse : New-ADUser | 3 h de clics → 30 s de script |
| Cloud Azure / Microsoft 365 | Gérer licences, boîtes mail, groupes de sécurité depuis le terminal | Portail web inutilisable à cette échelle |
| Sécurité / audit | Lister les comptes sans mot de passe, repérer les fichiers modifiés la nuit | Audit immédiat vs journées de travail manuel |
| DevOps / CI-CD | Scripts dans GitHub Actions, Azure Pipelines (build, test, déploiement automatiques) | Zéro intervention humaine à chaque commit |
| Support / diagnostic terrain | Générer en une commande un rapport d'état complet du poste | Pièce jointe au ticket en 5 s |
1. Ouvrir PowerShell
On ouvre le terminal. C'est ta fenêtre de travail pour toute la séance.
Étape 1 — Lancer PowerShell
- Clique sur le bouton Démarrer (le logo Windows, tout en bas à gauche de l'écran).
- Sans cliquer ailleurs, tape directement au clavier le mot
PowerShell: une zone de recherche apparaît et se remplit toute seule. - Dans les résultats, clique sur Windows PowerShell (icône bleue avec
>_).
Une fenêtre sombre (fond bleu nuit ou noir) s'ouvre, avec une ou deux lignes d'en-tête puis une ligne qui ressemble à ça :
PS C:\Users\toi> _
C'est l'invite (le « prompt ») : l'endroit où tu vas taper. Le petit trait _ qui clignote est le curseur — il indique que la machine t'attend.
Flag A1
Checkpoint
Regarde ton dossier courant (le chemin après PS). Rends : recopie-le exactement (ex. C:\Users\marc).
2. « Où suis-je ? »
La toute première question dans un terminal : dans quel dossier suis-je ? La commande répond.
Get-Location
Appuie sur Entrée. Tu vois :
Path
----
C:\Users\toi
Flag A2
Checkpoint
Tape pwd. Rends : le chemin obtenu est-il le même qu'avec Get-Location ? (oui / non)
3. « Qu'y a-t-il ici ? »
Maintenant, listons ce que contient le dossier courant.
Get-ChildItem
Tu obtiens une liste, par exemple :
Répertoire : C:\Users\toi
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 12/09/2026 09:14 Documents
d----- 12/09/2026 09:14 Bureau
-a---- 10/09/2026 16:02 1024 notes.txt
Décoder la colonne Mode — le détail que les pros lisent
La colonne Mode contient jusqu'à 6 lettres. Chaque position a un sens précis :
| Position | Lettre | Signification | Exemple concret |
|---|---|---|---|
| 1 | d | Directory (dossier) | d----- = dossier normal |
| 1 | - | Fichier ordinaire | -a---- = fichier normal |
| 2 | a | Archive (modifié depuis la dernière sauvegarde) | Présent sur presque tous les fichiers courants |
| 3 | r | Read-only (lecture seule) | -ar--- = fichier protégé en écriture |
| 4 | h | Hidden (caché — non visible par défaut) | d--h-- = dossier caché |
| 5 | s | System (fichier système) | --rhs- = fichier système protégé |
| 6 | l | Link (lien symbolique) | l----- = raccourci/alias vers un autre fichier |
Voir les fichiers cachés
Par défaut, ls masque les fichiers et dossiers dont le Mode contient h (hidden). Pour tout afficher :
ls -Force
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--h-- 12/09/2026 09:14 AppData
d----- 12/09/2026 09:14 Documents
-a---- 10/09/2026 16:02 1024 notes.txt
Flag A3
Checkpoint
Tape ls dans ton dossier personnel. Rends : combien d'éléments de type dossier (Mode commençant par d) vois-tu ?
4. Se déplacer
On va entrer dans un dossier, puis en ressortir. C'est comme ouvrir un dossier d'un double-clic, mais en commande.
Entrer dans un dossier
Set-Location Documents
Regarde l'invite : elle a changé, tu es maintenant dans Documents :
PS C:\Users\toi\Documents> _
Remonter d'un cran
Set-Location ..
Revenir vite en arrière : Push-Location et Pop-Location
Imagine que tu travailles dans un dossier profond, tu dois aller vite ailleurs, puis revenir exactement là où tu étais :
Push-Location C:\Windows\System32
# ... tu fais ce que tu as à faire dans System32 ...
Pop-Location
PS C:\Users\toi\Documents\labo-terminal> _ # retour automatique
Flag A4
Checkpoint
Entre dans Documents (cd Documents), vérifie avec pwd, puis reviens en arrière (cd ..). Rends : le chemin affiché par pwd quand tu étais dans Documents.
5. Créer ton dossier de travail
Pour t'entraîner sans toucher à tes vrais fichiers, on crée un dossier rien que pour ce playbook.
Étape 1 — Va dans Documents
cd ~\Documents
Étape 2 — Crée le dossier
New-Item -ItemType Directory -Name labo-terminal
PowerShell confirme la création :
Répertoire : C:\Users\toi\Documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 12/09/2026 10:30 labo-terminal
Étape 3 — Entre dedans
cd labo-terminal
Tu es maintenant dans ton terrain de jeu :
PS C:\Users\toi\Documents\labo-terminal> _
Flag B1
Production
Dans labo-terminal, crée deux sous-dossiers : brouillons et final. Rends : les deux commandes que tu as tapées, et le résultat de ls qui montre les deux dossiers.
6. Créer un fichier & écrire dedans
On crée un fichier texte et on y met du contenu, sans jamais ouvrir le Bloc-notes.
Écrire du texte dans un fichier
"Ma première note depuis le terminal" | Out-File note.txt
Rien ne s'affiche, et c'est normal : le texte n'est pas allé à l'écran, il est parti dans le fichier grâce au tuyau. Pas de message = ça a marché. Vérifie que le fichier existe bien avec ls :
-a---- 12/09/2026 10:42 42 note.txt
Flag B2
Production
Crée un fichier moi.txt contenant ton prénom et ton groupe (ex. "Marc - SIO1A"). Rends : la commande utilisée.
7. Lire un fichier
Pour voir le contenu d'un fichier sans l'ouvrir dans une fenêtre :
Get-Content note.txt
expl.
Get-Content — « donne-moi le contenu » de ce fichier. (Alias : cat, classique venu de Linux.)
note.txt — le fichier à lire.
Le contenu s'affiche directement dans le terminal :
Ma première note depuis le terminal
Comment ça marche
Beaucoup de commandes commencent par Get- (obtenir) ou Set- (définir), suivies de ce sur quoi elles agissent : Get-Location, Get-ChildItem, Get-Content… Une fois la logique verbe-nom comprise, tu devines des commandes que tu n'as jamais vues.
Flag A5
Checkpoint
Lis ton fichier moi.txt (du Flag B2). Rends : la commande, et confirme que le contenu affiché est bien ton prénom + groupe.
8. Copier
Faire une copie d'un fichier (l'original reste, on obtient un duplicata).
Copy-Item note.txt note-copie.txt
expl.
Copy-Item — « copie cet élément ». (Alias : cp, ou copy.)
note.txt — la source (ce qu'on copie).
note-copie.txt — la destination (le nom de la copie).
Vérifie avec ls : tu as maintenant les deux fichiers.
-a---- ... note.txt
-a---- ... note-copie.txt
Copier dans un sous-dossier
Copy-Item note.txt brouillons\note.txt
expl.
Ici la destination est un chemin : brouillons\note.txt place la copie dans le dossier brouillons (créé au Flag B1).
Flag B3
Production
Copie ton fichier moi.txt dans le dossier final. Rends : la commande, puis le ls final qui prouve que la copie est arrivée.
9. Déplacer & renommer
Déplacer = changer un fichier d'endroit (l'original ne reste pas). Renommer = lui donner un autre nom. C'est la même commande.
Déplacer
Move-Item note-copie.txt brouillons\
expl.
Move-Item — « déplace cet élément ». (Alias : mv, ou move.)
note-copie.txt — le fichier à déplacer.
brouillons\ — la destination (le \ final indique « dans ce dossier »).
Renommer
Move-Item note.txt note-finale.txt
expl.
Quand la destination est un nom (pas un dossier), Move-Item renomme : note.txt devient note-finale.txt au même endroit.
Pourquoi déplacer = renommer ?
Pour l'ordinateur, un fichier est défini par son chemin complet (dossier + nom). Changer le dossier OU le nom, c'est dans les deux cas « changer son chemin ». D'où une seule commande pour les deux.
Flag B4
Production
Renomme ton moi.txt en fiche-eleve.txt. Rends : la commande, et le ls qui montre le nouveau nom.
10. Supprimer
La commande la plus puissante… et la plus dangereuse. À manier avec attention.
Remove-Item note-copie.txt
expl.
Remove-Item — « supprime cet élément ». (Alias : rm, ou del.)
note-copie.txt — le fichier à supprimer.
Rien ne s'affiche : le fichier a disparu. Vérifie avec ls — il n'est plus là.
Important
pas de corbeille
Dans le terminal, Remove-Item supprime définitivement : pas de passage par la corbeille. Avant de supprimer, fais toujours un ls pour être sûr de viser le bon fichier. On supprime ce qu'on a créé pour s'entraîner, jamais un fichier dont on n'est pas certain.
Piège pro CRITIQUE
rm * sans cible précise
La commande la plus dangereuse que tu puisses taper par erreur :
rm * # DANGER : supprime TOUS les fichiers du dossier courant
Si tu es dans C:\Users\toi\Documents quand tu fais ça, tous tes documents partent sans confirmation, sans corbeille, sans récupération possible (sauf sauvegarde). Ça arrive quand on oublie de se déplacer dans le bon dossier avant de supprimer.
Le réflexe qui sauve (en deux temps) :
ls # vérifie TOUJOURS ce qui est là avant rm *
Remove-Item *.txt -WhatIf # prévisualise ce qui partirait (voir chapitre 17)
Remove-Item *.txt # seulement si la liste -WhatIf est bonne
Si un fichier résiste avec « Accès refusé » → il est en r (lecture seule). Ajoute -Force : Remove-Item fichier.txt -Force. À utiliser sciemment, jamais par réflexe.
Erreur courante
supprimer un dossier non vide
Message : Le répertoire ... n'est pas vide.
Cause : tu essaies de supprimer un dossier qui contient encore des fichiers.
Solution : ajoute -Recurse pour supprimer le dossier et son contenu : Remove-Item brouillons -Recurse. (À utiliser en connaissance de cause.)
Flag C1
Manipulation
Crée un fichier test-suppr.txt, vérifie qu'il existe (ls), supprime-le, vérifie qu'il a disparu (ls). Rends : les commandes dans l'ordre, et une phrase : pourquoi faut-il être prudent avec Remove-Item ?
11. Les chemins : absolus, relatifs & jokers
Jusqu'ici tu as donné des noms simples (Documents). Mais on peut désigner n'importe quel fichier où qu'on soit — il faut comprendre les chemins.
Chemin relatif vs chemin absolu
| Type | Exemple | Veut dire |
|---|---|---|
| Relatif | brouillons\note.txt | à partir d'où je suis maintenant |
| Absolu | C:\Users\toi\Documents\labo-terminal\brouillons\note.txt | l'adresse complète, valable de partout |
L'analogie de l'adresse
« La boulangerie au coin de la rue » (relatif : ça dépend d'où tu pars) vs « 12 rue Victor Hugo, 75001 Paris » (absolu : ça marche depuis n'importe où). Dans le doute, le chemin absolu ne se trompe jamais.
Les jokers (wildcards)
Le caractère * remplace « n'importe quoi ». Très puissant pour agir sur plusieurs fichiers d'un coup.
ls *.txt
expl.
*.txt — tout ce qui se termine par .txt (n'importe quel nom, extension .txt).
-a---- ... note.txt
-a---- ... moi.txt
Flag A6
Checkpoint
Affiche le chemin absolu de ton dossier labo-terminal (avec pwd dedans), puis liste uniquement les fichiers .txt. Rends : le chemin absolu + la commande de filtrage.
12. Explorer en profondeur
Un dossier peut contenir des sous-dossiers, eux-mêmes pleins de fichiers. Comment tout voir d'un coup ?
Descendre dans tous les sous-dossiers
ls -Recurse
expl.
-Recurse — « entre récursivement dans chaque sous-dossier » et liste aussi leur contenu, à tous les niveaux.
Répertoire : C:\Users\toi\Documents\labo-terminal
d----- ... brouillons
d----- ... final
-a---- ... note.txt
Répertoire : ...\labo-terminal\brouillons
-a---- ... note.txt
Trier le résultat
ls | Sort-Object Length
expl.
ls produit la liste, | l'envoie à…
Sort-Object Length — qui la trie selon la colonne Length (la taille). Du plus petit au plus grand.
Comment ça marche
tout est « objet »
Contrairement à un vieux terminal qui ne manipule que du texte, PowerShell fait circuler des objets (un fichier a un nom, une taille, une date…). C'est pour ça qu'on peut trier par Length ou filtrer par date : chaque élément « connaît » ses propriétés.
Flag A7
Checkpoint
Liste récursivement labo-terminal (ls -Recurse). Rends : combien de fichiers note.txt apparaissent en tout (compte ceux des sous-dossiers) ?
13. Chercher un fichier ou du texte
Le terminal brille quand il faut retrouver quelque chose dans des centaines de fichiers.
Retrouver un fichier par son nom
ls -Recurse -Filter moi.txt
expl.
-Filter moi.txt — ne garde que les éléments dont le nom correspond. Combiné à -Recurse, ça fouille tous les sous-dossiers.
Chercher du TEXTE dans des fichiers
C'est l'équivalent du célèbre grep de Linux : trouver dans quels fichiers apparaît un mot.
Select-String -Path *.txt -Pattern "SIO1A"
expl.
Select-String — cherche un motif à l'intérieur des fichiers.
-Path *.txt — dans quels fichiers chercher (tous les .txt).
-Pattern "SIO1A" — le texte recherché.
moi.txt:1:Marc - SIO1A
expl.
La sortie dit : dans moi.txt, à la ligne 1, le texte cherché apparaît dans « Marc - SIO1A ».
Aller plus loin avec Select-String — les options que les pros utilisent
| Option | Rôle | Exemple concret |
|---|---|---|
-CaseSensitive | Distingue majuscules/minuscules (désactivé par défaut) | Select-String -Path *.txt -Pattern "Marc" -CaseSensitive → trouve « Marc » mais PAS « marc » |
-SimpleMatch | Cherche la chaîne littérale (désactive les regex) | Utile pour chercher un point . sans qu'il signifie « n'importe quel caractère » |
-AllMatches | Toutes les occurrences par ligne, pas seulement la 1re | Si un mot apparaît 3 fois sur la même ligne, les 3 sont signalées |
-List | N'affiche que les noms de fichiers contenant le motif | Select-String -Path *.log -Pattern "ERREUR" -List |
-Context N,M | Affiche N lignes avant et M lignes après la correspondance | -Context 2,1 → 2 lignes de contexte avant, 1 après — comme grep -B2 -A1 |
Exemple travaillé — trouver une erreur dans des journaux
Scénario réel : tu viens de diagnostiquer un poste. Il y a 15 fichiers .log dans le dossier. Tu veux savoir quels fichiers contiennent le mot « ERREUR » :
Select-String -Path ".\*.log" -Pattern "ERREUR" -List
expl.
-Path ".\*.log" — cherche dans tous les .log du dossier courant. Le .\ (dossier courant) est obligatoire quand on utilise un joker dans -Path.
-Pattern "ERREUR" — par défaut, Select-String accepte les expressions régulières (regex) : ERR.UR trouverait aussi « ERREUR » car le point . signifie « n'importe quel caractère ». Pour chercher un point littéral, utilise \. ou ajoute -SimpleMatch.
-List — retourne uniquement les noms des fichiers concernés, pas chaque ligne. Idéal pour un premier tri sur 15 fichiers.
journal-2026-09-12.log
journal-2026-09-14.log
expl.
En une commande, tu sais lesquels des 15 fichiers contiennent des erreurs. C'est ce qu'un technicien fait chaque jour : fouiller sans ouvrir un par un.
Les regex en une ligne
juste l'essentiel
Le motif -Pattern accepte les expressions régulières :
.— n'importe quel caractère\d— un chiffre (0–9) ;\d{4}= exactement 4 chiffres^ERREUR— la ligne commence par ERREURtimeout$— la ligne se termine par timeout
Exemple : Select-String -Path *.log -Pattern "^\d{4}-\d{2}-\d{2} \d{2}:\d{2}" trouve toutes les lignes de log horodatées au format 2026-09-12 10:48.
Flag D2
Investigation
Cherche dans tous tes .txt le mot de ton groupe (ex. SIO1A). Rends : la commande, et le nom du/des fichier(s) où il a été trouvé.
14. Combiner : la puissance du pipe
Tu l'as déjà croisé (|). C'est LE super-pouvoir du terminal : brancher des commandes bout à bout, chacune affinant le résultat de la précédente.
Compter
ls | Measure-Object
expl.
Measure-Object — compte les éléments reçus (et peut faire des stats). Regarde la ligne Count.
Count : 3
Filtrer puis compter
ls | Where-Object { $_.Mode -like "d*" } | Measure-Object
expl.
Where-Object { ... } — ne garde que les éléments qui passent un test.
$_.Mode -like "d*" — « l'élément courant ($_) a un Mode qui commence par d » → donc seulement les dossiers.
Le tout : compter uniquement les dossiers.
Comment ça marche
la chaîne de montage
Imagine une chaîne d'usine : ls sort les pièces, Where-Object écarte les mauvaises, Measure-Object les compte. Chaque | est un tapis roulant. En enchaînant des commandes simples, tu réponds à des questions complexes.
Visualiser la chaîne de montage
Le principe du pipe devient plus clair avec un schéma. Chaque commande reçoit des objets, en traite certains et envoie le résultat à la suivante :
Chaque | est un tapis roulant : ls sort les pièces, Where-Object trie, Measure-Object compte.
Opérateurs de comparaison : la boîte à outils de Where-Object
| Opérateur PS | Signification | Exemple |
|---|---|---|
-eq | égal à | { $_.Length -eq 0 } → fichiers vides |
-ne | différent de | { $_.Name -ne "readme.txt" } |
-gt / -lt | supérieur / inférieur | { $_.Length -gt 1024 } → > 1 Ko |
-like | correspond à un motif joker (*) | { $_.Name -like "*.txt" } |
-match | correspond à une expression régulière | { $_.Name -match "^\d{4}" } → commence par 4 chiffres |
Raccourci
Where-Object en abrégé
PowerShell 3+ accepte une syntaxe courte quand on filtre sur une seule propriété :
ls | Where-Object Length -gt 1024 au lieu de ls | Where-Object { $_.Length -gt 1024 }.
Même résultat, moins de caractères.
ForEach-Object — appliquer une action à chaque élément
Après avoir filtré, on veut souvent faire quelque chose avec chaque résultat — pas juste les compter. C'est le rôle de ForEach-Object (alias court : %) :
ls *.txt | ForEach-Object { Write-Output "Fichier : $($_.Name) — $($_.Length) octets" }
expl.
ls *.txt — produit la liste des fichiers .txt.
| — envoie chaque fichier un par un à ForEach-Object.
{ … } — le bloc de code à exécuter pour chaque élément reçu.
$_ — l'élément courant : le fichier traité à cet instant.
$($_.Name) — syntaxe pour inclure une expression (pas juste une variable simple) à l'intérieur d'une chaîne. Les parenthèses autour de $_.Name forcent l'évaluation complète avant l'insertion.
Fichier : fiche-eleve.txt — 12 octets
Fichier : note-finale.txt — 37 octets
Exemple travaillé — rapport de taille en kilo-octets
Cas concret : tu veux lister les fichiers de plus de 500 octets avec leur taille arrondie en Ko (1 Ko = 1 024 octets) :
ls -Recurse | Where-Object { $_.Length -gt 500 } | ForEach-Object {
$ko = [Math]::Round($_.Length / 1024, 1)
Write-Output "$($_.Name) : $ko Ko"
}
expl.
ls -Recurse — liste tout, y compris sous-dossiers.
Where-Object { $_.Length -gt 500 } — filtre : seulement les fichiers > 500 octets. Les dossiers ont une Length nulle ($null), donc ils passent le filtre sans erreur.
[Math]::Round($_.Length / 1024, 1) — PowerShell expose les fonctions mathématiques .NET via [Math]::. Ici : divise la taille en octets par 1 024 pour obtenir des Ko, arrondi à 1 décimale. Autres méthodes utiles : [Math]::Abs(), [Math]::Max(a,b), [Math]::Sqrt().
$ko — variable créée dans le bloc, locale à chaque itération de ForEach-Object. Elle est recalculée pour chaque fichier.
rapport-2026-09-12.txt : 1.2 Ko
liste.txt : 0.9 Ko
ForEach-Object dans un pipe vs boucle foreach — quand choisir quoi
ls | ForEach-Object { … } (dans un pipe) traite les éléments un par un, à la volée — adapté quand la liste vient d'une commande et qu'on veut enchaîner. La boucle foreach ($f in $liste) { … } (sans pipe) est utilisée dans un script quand tu as déjà une collection en variable. En pratique : le style pipe est idiomatique PowerShell pour les « one-liners » ; la boucle est plus lisible dans un script de 50+ lignes.
Flag B5
Production
Écris UNE seule ligne (avec des |) qui compte le nombre de fichiers (Mode commençant par -) dans ton dossier. Rends : ta commande et le Count obtenu. Indice : -like "-*".
15. Les variables : le terminal est aussi un langage
PowerShell n'est pas qu'une liste de commandes : c'est un vrai langage. Première brique : les variables (des boîtes où ranger une valeur).
$nom = "labo-terminal"
expl.
$nom — une variable (en PowerShell, ça commence toujours par $).
= — « range dans la boîte ».
"labo-terminal" — la valeur stockée.
Maintenant réutilise-la partout :
cd ~\Documents\$nom
expl.
PowerShell remplace $nom par sa valeur → revient à cd ~\Documents\labo-terminal. Tu écris la valeur une fois, tu la réutilises autant que tu veux.
Pourquoi c'est énorme
Variables + commandes + un peu de logique = des scripts qui automatisent des tâches entières. C'est exactement ce qu'on fera à la séance « Automatiser de petites tâches ». Tu viens de poser la première pierre du développement.
Les types de données — ce que peut contenir une variable
| Type | Exemple | Ce que ça fait |
|---|---|---|
Texte ([string]) | $nom = "Marc" | Chaîne de caractères. Guillemets obligatoires. |
Entier ([int]) | $annee = 2026 | Nombre entier. Pas de guillemets. |
Décimal ([double]) | $note = 18.5 | Point (pas virgule) comme séparateur décimal. |
Booléen ([bool]) | $actif = $true | Vrai ou faux. PS fournit $true et $false. |
Tableau ([array]) | $classes = "SIO1A","SIO1B" | Plusieurs valeurs dans une boîte. |
Null ($null) | $x = $null | « Rien » — variable vide. |
String interpolation — mettre une variable dans du texte
C'est la fonctionnalité la plus utilisée en pratique : inclure la valeur d'une variable à l'intérieur d'une phrase.
$prenom = "Marc"
$groupe = "SIO1A"
Write-Output "Bonjour, je suis $prenom du groupe $groupe !"
expl.
Entre guillemets doubles "...", PowerShell développe les variables (remplace $prenom par sa valeur). On appelle ça l'interpolation.
Bonjour, je suis Marc du groupe SIO1A !
Piège
guillemets simples bloquent l'interpolation
Message : la variable s'affiche littéralement au lieu de sa valeur.
Cause : '...' (guillemets simples) = texte brut, aucune substitution. "..." (guillemets doubles) = interpolation.
Write-Output 'Bonjour $prenom' # affiche : Bonjour $prenom ← MAUVAIS
Write-Output "Bonjour $prenom" # affiche : Bonjour Marc ← CORRECT
Règle simple : utilise des guillemets doubles dès que tu inclus une variable.
Piège
addition ou concaténation ?
PS est dynamiquement typé. Le + fait une addition ou une concaténation selon le type de la variable de gauche :
$a = 5; $b = "3"
$a + $b # Erreur ! On ne peut pas additionner un int et une string
Toujours s'assurer que les deux côtés d'un + sont du même type, ou convertir explicitement : [int]$b pour forcer en entier.
Méthodes sur les chaînes — ce qu'on peut faire avec du texte
En PowerShell, une chaîne n'est pas un texte passif : elle a des méthodes (des actions) que tu appelles avec un point. Syntaxe : $variable.Méthode().
| Méthode | Ce qu'elle fait | Exemple | Résultat |
|---|---|---|---|
.Length | Nombre de caractères | "SIO1A".Length | 5 |
.ToUpper() | Tout en majuscules | "marc".ToUpper() | MARC |
.ToLower() | Tout en minuscules | "SIO".ToLower() | sio |
.Trim() | Supprime espaces début/fin | " bonjour ".Trim() | bonjour |
.Contains("x") | Contient ce texte ? (True/False) | "SIO1A".Contains("1") | True |
.Replace("a","b") | Remplace a par b partout | "SIO1A".Replace("1","2") | SIO2A |
.Split(",") | Découpe en tableau selon un séparateur | "a,b,c".Split(",") | tableau : a / b / c |
.StartsWith("x") | Commence par x ? (True/False) | "rapport-2026.txt".StartsWith("rapport") | True |
.Substring(i, n) | Extrait n caractères à partir de la position i (débute à 0) | "2026-09-12".Substring(0,4) | 2026 |
.IndexOf("x") | Position de la 1re occurrence de x (−1 si absent) | "SIO1A".IndexOf("1") | 3 |
Exemple travaillé — construire un nom de fichier propre
$utilisateur = $env:USERNAME
$date = Get-Date -Format "yyyy-MM-dd"
$nomFichier = ("rapport-" + $utilisateur + "-" + $date + ".txt").ToUpper()
Write-Output $nomFichier
expl.
"rapport-" + $utilisateur + "-" + $date + ".txt" — concatène les morceaux. Résultat intermédiaire : "rapport-marc-2026-09-12.txt".
.ToUpper() — appelé sur le résultat de la concaténation, pas sur une variable. En PowerShell, tu peux enchaîner une méthode directement sur une expression entre parenthèses.
RAPPORT-MARC-2026-09-12.TXT
Enchaîner les méthodes
Chaque méthode retourne une nouvelle chaîne sur laquelle tu peux de nouveau appeler une méthode :
" Marc - SIO1A ".Trim().ToLower().Replace(" ", "_") → marc_-_sio1a
C'est l'équivalent texte du pipe | : chaque méthode transforme le résultat de la précédente.
Arithmétique — PowerShell comme calculatrice
| Opérateur / méthode | Opération | Exemple | Résultat |
|---|---|---|---|
+ - * / | Opérations de base | 100 / 4 | 25 |
% | Modulo (reste de division entière) | 10 % 3 | 1 |
[Math]::Pow(x, y) | Puissance x exposant y | [Math]::Pow(2, 10) | 1024 |
[Math]::Round(x, d) | Arrondi à d décimales | [Math]::Round(3.14159, 2) | 3.14 |
[Math]::Abs(x) | Valeur absolue | [Math]::Abs(-42) | 42 |
Exemple concret : convertir des octets en méga-octets (1 Mo = 1 048 576 octets = 1 024 × 1 024) :
$octets = 5242880 # 5 Mo en octets
$mo = [Math]::Round($octets / 1048576, 1)
Write-Output "$mo Mo"
5 Mo
Flag B6
Production
Crée une variable $moi contenant ton prénom, puis affiche-la avec Write-Output $moi (ou simplement $moi). Rends : les deux lignes et ce qui s'affiche.
16. Mini-projet : ranger un dossier en bazar
On mobilise tout ce que tu sais. Scénario : un dossier recu où des fichiers traînent en vrac. Mission : le ranger proprement, en commandes.
Étape 1 — Fabrique le bazar
cd ~\Documents\labo-terminal
mkdir recu
"facture 1" | Out-File recu\facture1.txt
"facture 2" | Out-File recu\facture2.txt
"photo" | Out-File recu\vacances.jpg.txt
"note" | Out-File recu\todo.txt
expl.
On crée un dossier recu et quatre fichiers en vrac dedans (deux factures, un « média », une note).
Étape 2 — Range
À toi de jouer, en t'appuyant sur ton antisèche :
- Dans
recu, crée trois sous-dossiers :factures,medias,notes. - Déplace les deux factures dans
factures(joker :facture*.txt). - Déplace le fichier média dans
medias. - Déplace la note dans
notes. - Vérifie le rangement avec
ls -Recurse.
Flag B7
Mini-projet (production)
Réalise le rangement. Rends : la suite de commandes utilisées (étape 2) + le résultat final de ls -Recurse qui montre chaque fichier dans le bon dossier.
Défis bonus
Bonus A : déplace les deux factures en UNE seule commande (avec le joker facture*).
Bonus B : compte, en une ligne avec des |, combien de fichiers contient recu et ses sous-dossiers (ls -Recurse | …).
17. Agir sans risque
Un bon technicien vérifie avant d'agir, surtout pour les opérations qui détruisent. Deux outils pour ça.
Vérifier qu'un fichier existe — Test-Path
Test-Path note.txt
expl.
Test-Path — répond True (le fichier existe) ou False (il n'existe pas). Pratique avant de copier ou supprimer.
True
Prévisualiser une suppression — sans rien supprimer
Remove-Item *.txt -WhatIf
expl.
-WhatIf — « qu'est-ce que ça ferait ? ». PowerShell annonce ce qu'il supprimerait, mais ne supprime rien. Un filet de sécurité avant une commande risquée.
Confirmer
Opération « Supprimer le fichier » sur la cible « ...\note.txt ».
Opération « Supprimer le fichier » sur la cible « ...\moi.txt ».
Le réflexe qui sauve
Avant un Remove-Item avec un joker (*), lance-le d'abord avec -WhatIf : tu vois exactement ce qui partirait. Si la liste est bonne, relance sans -WhatIf.
Flag A8
Checkpoint
Vérifie l'existence de fiche-eleve.txt (Test-Path), puis prévisualise (avec -WhatIf) la suppression de tous les .txt de ton dossier. Rends : la réponse de Test-Path (True/False) et la liste annoncée par -WhatIf.
18. Rediriger & accumuler
On peut envoyer la sortie d'une commande dans un fichier au lieu de l'écran. Très utile pour garder une trace.
Rediriger (remplace) — >
ls > liste.txt
expl.
> — au lieu d'afficher le résultat de ls à l'écran, l'écrit dans liste.txt (en écrasant ce qu'il contenait).
Rien à l'écran : c'est parti dans le fichier. Vérifie :
Get-Content liste.txt
brouillons
final
fiche-eleve.txt
...
Ajouter à la fin (sans écraser) — >>
"--- fin de la liste ---" >> liste.txt
expl.
>> (double) — ajoute à la fin du fichier au lieu de l'écraser. > remplace, >> accumule.
À quoi ça sert vraiment
Un technicien redirige souvent la sortie d'un diagnostic (l'état du réseau, la liste des logiciels…) dans un fichier pour le joindre à un ticket ou le garder comme preuve. Tu viens d'apprendre à produire un rapport automatiquement.
Flag B8
Production
Écris la liste récursive de labo-terminal dans un fichier rapport.txt (ls -Recurse > rapport.txt), puis ajoute une ligne « Rapport établi par <ton nom> » à la fin. Rends : les deux commandes et le contenu final lu avec cat rapport.txt (les premières lignes suffisent).
19. Aller un peu plus loin
Trois commandes bonus que les techniciens utilisent tous les jours.
La date & l'heure
Get-Date
expl.
Get-Date — donne la date et l'heure actuelles. Utile pour horodater un fichier ou un rapport.
samedi 12 septembre 2026 11:48:20
Qui suis-je, sur quelle machine ?
$env:USERNAME
$env:COMPUTERNAME
expl.
$env:... — les variables d'environnement : des infos que le système met à ta disposition.
USERNAME = ton identifiant de session ; COMPUTERNAME = le nom du poste. Indispensable quand on documente une intervention.
marc
POSTE-SALLE-204
Renommer en s'appuyant sur un motif
Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace ".txt", ".bak" }
expl.
On liste les .txt, on les envoie (|) à Rename-Item, qui pour chaque fichier ($_) remplace .txt par .bak dans son nom. Renommer 50 fichiers d'un coup, impossible à la souris sans y passer la journée.
Formater la date — pour les rapports et noms de fichiers
Get-Date -Format "yyyy-MM-dd"
expl.
-Format "yyyy-MM-dd" — formate la date selon un masque. Les codes courants :
| Format | Résultat exemple | Usage typique |
|---|---|---|
yyyy-MM-dd | 2026-09-12 | Noms de fichiers (tri alphabétique = tri chronologique) |
HH:mm:ss | 10:48:32 | Horodatage dans un log |
yyyy-MM-dd_HH-mm | 2026-09-12_10-48 | Nom de fichier de sauvegarde avec heure |
dddd dd MMMM yyyy | samedi 12 septembre 2026 | Affichage lisible dans un rapport |
Pratique courante : créer un fichier dont le nom contient la date automatiquement :
$date = Get-Date -Format "yyyy-MM-dd"
ls -Recurse > "rapport-$date.txt"
expl.
Le fichier s'appellera rapport-2026-09-12.txt. Chaque fois que tu relances le script, un nouveau fichier est créé avec la date du jour — jamais d'écrasement accidentel.
rapport-2026-09-12.txt
Trouver une commande — Get-Command
Tu cherches une commande mais tu ne te souviens pas de son nom exact ? PowerShell peut chercher par verbe ou par nom :
Get-Command -Verb "Get"
expl.
Liste toutes les commandes dont le verbe est Get. Tu découvres Get-Process, Get-Service, Get-EventLog…
Get-Command -Noun "Item"
expl.
Liste toutes les commandes qui agissent sur un Item : Get-Item, New-Item, Copy-Item, Move-Item, Remove-Item. La logique verbe-nom de PowerShell t'offre un catalogue auto-découvrable.
Voir les processus en cours — Get-Process
Get-Process
expl.
Get-Process — liste tous les programmes qui tournent en ce moment (comme le Gestionnaire des tâches, mais en ligne de commande). Chaque ligne = un processus, avec son Id, son Name et sa consommation mémoire (WS = Working Set, en octets).
NPM(K) PM(M) WS(M) CPU(s) Id ProcessName
------ ----- ----- ------ -- -----------
5 3.22 8.40 0.09 1234 notepad
12 45.10 102.30 3.20 5678 chrome
Pour chercher un programme spécifique (ex. Chrome) :
Get-Process chrome
Et si… tu veux voir les alias existants
Get-Alias liste tous les raccourcis définis (ls → Get-ChildItem, cd → Set-Location, etc.). Pour trouver à quoi correspond un alias inconnu : Get-Alias ls. Pour trouver l'alias d'une commande connue : Get-Alias -Definition Get-ChildItem.
Flag D3
Investigation
Affiche ton identifiant de session et le nom de ton poste ($env:USERNAME, $env:COMPUTERNAME). Rends : les deux valeurs — elles iront dans la fiche d'intervention d'une vraie séance support.
20. Réflexes & demander de l'aide
| Besoin | Commande |
|---|---|
| Nettoyer l'écran (sans rien supprimer) | Clear-Host (alias cls) |
| Rappeler la commande précédente | flèche Haut ↑ du clavier |
| Compléter un nom automatiquement | touche Tab |
| Arrêter une commande qui tourne | Ctrl + C |
| Demander de l'aide sur une commande | Get-Help Copy-Item |
L'aide intégrée, ton meilleur ami
Tu ne te souviens plus comment marche une commande ? Get-Help <commande> te donne sa description et des exemples, sans quitter le terminal. Un vrai technicien ne retient pas tout — il sait chercher.
Flag D1
Investigation
Tape Get-Help Get-ChildItem -Examples. Rends : recopie un exemple d'utilisation que tu n'avais pas encore vu, et explique en une phrase ce qu'il fait.
Pour finir
Ton antisèche (à garder)
| Je veux… | Commande (alias) | Commande complète |
|---|---|---|
| savoir où je suis | pwd | Get-Location |
| lister le dossier | ls / dir | Get-ChildItem |
| voir fichiers cachés | ls -Force | Get-ChildItem -Force |
| entrer dans un dossier | cd nom | Set-Location nom |
| remonter d'un cran | cd .. | Set-Location .. |
| mémoriser ma position / y revenir | pushd / popd | Push-Location / Pop-Location |
| créer un dossier | mkdir nom | New-Item -ItemType Directory -Name nom |
| écrire dans un fichier (UTF-8) | — | "texte" | Out-File f.txt -Encoding UTF8 |
| ajouter à la fin d'un fichier | "texte" >> f.txt | "texte" | Out-File f.txt -Append |
| lire un fichier | cat f.txt | Get-Content f.txt |
| copier un fichier | cp src dest | Copy-Item src dest |
| déplacer / renommer | mv src dest | Move-Item src dest |
| supprimer (définitif !) | rm f.txt | Remove-Item f.txt |
| prévisualiser une suppression | — | Remove-Item *.txt -WhatIf |
| vérifier qu'un fichier existe | — | Test-Path f.txt |
| chercher du texte dans des fichiers | — | Select-String -Path *.txt -Pattern "mot" |
| compter / stats | — | ls | Measure-Object |
| filtrer par propriété | — | ls | Where-Object { $_.Mode -like "d*" } |
| trier les résultats | — | ls | Sort-Object Length |
| connaître la date/heure | — | Get-Date -Format "yyyy-MM-dd" |
| lister les processus | — | Get-Process |
| chercher une commande | — | Get-Command -Verb "Get" |
| aide sur une commande | — | Get-Help Copy-Item -Examples |
| nettoyer l'écran | cls | Clear-Host |
Vérifie tes acquis
Exercice Réussi À revoir
- Quelle commande affiche le dossier dans lequel tu te trouves ?
- Que signifie
..danscd ..? - À quoi sert le « tuyau »
|? - Quelle est la différence entre copier (
cp) et déplacer (mv) ? - Pourquoi faut-il être prudent avec
rm(Remove-Item) ? - Comment compléter automatiquement un nom de dossier en tapant ?
Voir le corrigéMasquer le corrigé de l'exercice
pwd(alias) ouGet-Location...désigne le dossier parent : un niveau au-dessus de là où tu es.cd ..remonte d'un cran.- Le pipe
|envoie la sortie d'une commande comme entrée d'une autre, sans passer par un fichier. Ex. :ls | Measure-Objectcompte les éléments. - Copier (
cp) laisse l'original en place et crée un double. Déplacer (mv) supprime l'original et le pose ailleurs (ou le renomme). - Parce que
rmsupprime sans corbeille ni confirmation : un fichier supprimé par erreur est définitivement perdu (sauf sauvegarde). Il faut toujours vérifier aveclset-WhatIfavant. - La touche Tab complète automatiquement un nom de fichier ou dossier. Si plusieurs choix existent, appuie plusieurs fois sur Tab pour les parcourir.
Tu avais trouvé ?
Tu es bloqué ?
Une commande « n'est pas reconnue » ? → vérifie l'orthographe, et que tu es bien dans PowerShell (pas cmd).
« Chemin introuvable » ? → fais ls pour voir ce qui existe ici, puis Tab pour compléter.
Un mot incompris ? → le glossaire ci-dessous. Une commande oubliée ? → l'antisèche.
Comment rendre ton travail
Rassemble tes réponses de flags dans l'ordre (A1 … D1). Le prof a le corrigé : tu sauras vite où tu en es.
Glossaire
| Mot | Définition |
|---|---|
Terminal / PowerShell | la fenêtre où l'on tape des commandes pour piloter la machine |
Dossier courant | l'endroit où l'on se trouve dans l'arborescence |
Chemin | l'adresse d'un fichier/dossier (ex. C:\Users\toi\Documents) |
Alias | un raccourci pour une commande (ls = Get-ChildItem) |
Argument | ce qu'on donne à une commande pour préciser |
Pipe | | « tuyau » qui envoie la sortie d'une commande vers une autre |
~ | raccourci pour ton dossier personnel |
.. | le dossier parent (juste au-dessus) |
La prochaine fois
On crée une machine virtuelle pour avoir un labo à toi, puis on installe Linux — et tu retrouveras le terminal, version Linux (bash), très proche de ce que tu viens d'apprendre.
Compétences mobilisées
référentiel BTS SIO SLAM
Bloc 1 · Mettre à disposition des utilisateurs un service informatique
→ Installer et configurer un poste, manipuler le système en ligne de commande
Bloc 1 · Gérer le patrimoine informatique
→ Manipuler les fichiers et l'arborescence d'un système