2. Lire & écrire des fichiers
Lire un fichier texte, écrire un rapport, et produire des logs exploitables.
- Lire un fichier texte avec
Get-Content - Écrire un fichier avec
Out-File - Ajouter des lignes avec
Add-Content - Mettre en place un log simple, horodaté, et réutilisable
Lecture
- Get-Content lit un fichier ligne par ligne
- -TotalCount limite le nombre de lignes lues
- -Tail lit les dernières lignes (pratique logs)
Écriture
- Out-File écrit (écrase par défaut)
- -Append ajoute sans écraser
- -Encoding UTF8 recommandé
Ajout & sécurité
- Add-Content ajoute une ou plusieurs lignes
- Test-Path vérifie existence (fichier/dossier)
- New-Item crée un dossier si besoin
Bonne pratique TSSR : distinguer “écriture d’un rapport” (souvent écrasé à chaque exécution)
et “log” (souvent en
-Append).
Lire un fichier avec Get-Content
# Lire tout le contenu d'un fichier
Get-Content "C:\Windows\System32\drivers\etc\hosts"
# Lire seulement les 5 premières lignes
Get-Content "C:\Windows\System32\drivers\etc\hosts" -TotalCount 5
# Lire les 10 dernières lignes (utile pour les logs)
Get-Content "C:\Windows\System32\drivers\etc\hosts" -Tail 10
Explication
- Get-Content : lit le fichier et renvoie un tableau de lignes
- -TotalCount : limite le début du fichier
- -Tail : lit la fin (comme “tail” sous Linux)
Écrire un fichier avec Out-File
# Écrire un fichier (écrase si déjà présent)
"Rapport du jour" | Out-File "C:\Temp\rapport.txt" -Encoding UTF8
# Écrire plusieurs lignes
@(
"Ligne 1",
"Ligne 2",
"Ligne 3"
) | Out-File "C:\Temp\rapport.txt" -Encoding UTF8
Explication
- Out-File écrit un fichier texte
- Sans
-Append, il écrase le fichier - -Encoding UTF8 évite de nombreux problèmes d’encodage
Réflexe : si ton but est un log, n’utilise pas “Out-File” sans
-Append.
Ajouter des lignes avec Add-Content
# Ajouter une ligne sans écraser le fichier
Add-Content -Path "C:\Temp\rapport.txt" -Value "Nouvelle ligne ajoutée"
# Ajouter plusieurs lignes
Add-Content -Path "C:\Temp\rapport.txt" -Value @("Ligne A", "Ligne B")
Explication
- Add-Content ajoute du texte à la fin du fichier
- Si le fichier n’existe pas, il est créé automatiquement
Mettre en place un log simple (horodaté)
En exploitation, un script doit laisser une trace : démarrage, actions, erreurs.
On met en place une fonction Write-Log qui écrit dans un fichier log.
# 1) Préparer le dossier de logs
$logDir = "C:\Temp\logs"
if (-not (Test-Path $logDir)) {
New-Item -ItemType Directory -Path $logDir | Out-Null
}
# 2) Définir le fichier log
$logFile = Join-Path $logDir "script.log"
# 3) Fonction de log
function Write-Log {
param(
[string]$Message,
[ValidateSet("INFO","WARN","ERROR")][string]$Level = "INFO"
)
$ts = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$line = "$ts [$Level] $Message"
Add-Content -Path $logFile -Value $line
}
# 4) Exemple d'utilisation
Write-Log "Démarrage du script"
Write-Log "Action effectuée : lecture fichier hosts"
Write-Log "Fin du script" "INFO"
Explication des commandes utilisées
- Test-Path : vérifie si le dossier existe
- New-Item : crée le dossier
logssi nécessaire - Join-Path : construit un chemin propre
- function Write-Log : encapsule l’écriture du log
- Get-Date -Format : horodatage lisible
- Add-Content : ajoute une ligne sans écraser le log
- [ValidateSet] : limite les niveaux possibles (INFO/WARN/ERROR)
Bonne pratique : le log doit être en
Add-Content (append) et jamais écrasé.
Exercices guidés
Corrigés masqués. Cherchez avant d’ouvrir.
Exercice 1 — Lire et filtrer
Lisez le fichier hosts et affichez uniquement les lignes qui ne commencent pas par #.
(Indice : filtre avec Where-Object.)
Corrigé
$p = "C:\Windows\System32\drivers\etc\hosts"
Get-Content $p | Where-Object { $_ -notmatch "^\s*#" -and $_.Trim() -ne "" }
Exercice 2 — Rapport simple
Créez un fichier C:\Temp\rapport_services.txt contenant la liste des services arrêtés
(nom + statut). (Indice : Get-Service puis Out-File.)
Corrigé
$out = "C:\Temp\rapport_services.txt"
Get-Service |
Where-Object { $_.Status -eq "Stopped" } |
Select-Object Name, Status |
Out-File $out -Encoding UTF8
Exercice 3 — Ajouter au log
Reprenez la fonction Write-Log et ajoutez deux messages :
INFO “Début analyse”, puis WARN “Fin analyse”.
Corrigé
Write-Log "Début analyse" "INFO"
Write-Log "Fin analyse" "WARN"
© 2026 — JcMamiah · PowerShell (TSSR)