2. Lire & écrire des fichiers

Lire un fichier texte, écrire un rapport, et produire des logs exploitables.
Objectifs
  • 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
Commandes clés

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).
Lecture

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)
Écriture

É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.
Ajout

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
Logs

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 logs si 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

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)