Ce script PowerShell, intitulé Sauvegarde-Miroir.ps1 , est conçu pour créer une sauvegarde de type miroir sur un disque externe.
On va utiliser un outil :"Robocopy"
Présentation de Robocopy
Robocopy (Robust File Copy) est un outil officiel de Microsoft, intégré nativement à Windows depuis Vista.
Il est conçu pour réaliser des copies et synchronisations de fichiers de manière fiable, rapide et robuste, même sur de gros volumes de données.
- Tolérant aux interruptions : reprend là où il s’est arrêté en cas de problème.
- Performant : peut utiliser plusieurs flux en parallèle (option /MT) pour accélérer la copie.
- Flexible : permet de choisir entre simple copie, sauvegarde incrémentielle, ou mode miroir.
- Fiable : gère correctement les erreurs, les fichiers verrouillés, les autorisations NTFS, etc.
Une copie avec l’Explorateur Windows peut échouer en cas de fichier verrouillé ou de gros volumes.
Robocopy, lui, est conçu pour gérer ces cas et offrir un suivi détaillé grâce à ses logs.
- Sauvegarde personnelle vers un disque externe.
- Synchronisation régulière d’un dossier de travail.
- Duplication de gros volumes de données pour archivage.
L’option /MIR crée une copie strictement identique à la source.
Ce mode convient parfaitement à une logique de clone, mais pas pour conserver des archives.
Pré-requis pour utiliser le script Sauvegarde-Miroir.ps1
- Un disque externe ou un support de sauvegarde disponible
- Le disque doit être branché et reconnu par Windows (exemple : E: ou H:).
- Vérifiez que la capacité est suffisante pour contenir toutes vos données à sauvegarder.
- Création du dossier de sauvegarde sur le disque externe
Exemple : H:\Sauvegardes\MonDossierSauvegarde
Le dossier peut être créé manuellement via l’Explorateur Windows - Définition claire des chemins dans le script
- $source = dossier à sauvegarder (ex. C:\Users\Jean)
- $destination = dossier sur le disque externe (ex. H:\Sauvegardes\Jean)
- $logfile = emplacement du fichier log (ex. H:\Sauvegardes\Mirror_Jean.log)
- Droits d’accès
L’utilisateur doit avoir les droits en lecture sur le dossier source et en écriture sur le disque externe.
Pas besoin d’être administrateur, sauf si le dossier source contient des fichiers système protégés.


Tout fichier supprimé dans la source sera également supprimé dans la sauvegarde.
Ce script n’est pas une sauvegarde historique (il n’archive pas les anciennes versions).
Le code commenté
Il est à adapter en fonction de votre configuration
Code : Tout sélectionner
<#
.Version
Nom du script : Sauvegarde-Miroir.ps1
Créateur : PiB pour TEAM-AAZ
Version : 1.1.0.1.a
Date : Septembre 2025
.SYNOPSIS
Script PowerShell de sauvegarde en mode "miroir".
.DESCRIPTION
Ce script synchronise (clone) un dossier source vers un dossier cible.
Le contenu de la destination sera identique à celui de la source :
- Tout fichier ajouté ou modifié dans la source sera copié
- Tout fichier supprimé dans la source sera aussi supprimé dans la destination
ATTENTION :
- C’est une synchronisation "miroir", pas une sauvegarde historique !
- Les fichiers supprimés à la source seront supprimés dans la copie.
#>
# Charger la librairie .NET pour afficher des messages graphiques
Add-Type -AssemblyName System.Windows.Forms
# -------------------------------------------------------------------
# 🔧 PARAMÈTRES À PERSONNALISER
# -------------------------------------------------------------------
# Chemin du dossier source (à sauvegarder)
$source = "X:\Chemin\Vers\MonDossierSource"
# Chemin du dossier destination (ex. disque externe)
$destination = "Y:\Sauvegardes\MonDossierSauvegarde"
# Nom et emplacement du fichier log
$logfile = "Y:\Sauvegardes\Mirror_Sauvegarde.log"
# -------------------------------------------------------------------
# Vérifie si le dossier cible existe, sinon le crée
if (-not (Test-Path $destination)) {
New-Item -Path $destination -ItemType Directory -Force | Out-Null
}
# -------------------------------------------------------------------
# Lancement de Robocopy
# -------------------------------------------------------------------
# Options utilisées :
# /MIR : mode miroir (ajoute/supprime pour correspondre à la source)
# /XJ : ignore les jonctions (évite les boucles infinies)
# /R:2 : réessaie 2 fois si un fichier est verrouillé
# /W:5 : attend 5 secondes entre les tentatives
# /MT:16 : copie multi-thread (16 flux en parallèle, accélère la copie)
# /XA:O : ignore les fichiers Cloud non présents localement (OneDrive, Dropbox, etc.)
# /UNILOG : génère un log en Unicode (UTF-16 LE BOM), plus fiable pour les caractères accentués
# -------------------------------------------------------------------
robocopy $source $destination /MIR /XJ /R:2 /W:5 /MT:16 /XA:O /UNILOG:$logfile
$exitCode = $LASTEXITCODE
# -------------------------------------------------------------------
# Conversion du log en UTF-8 BOM
# -------------------------------------------------------------------
# Robocopy écrit en Unicode (UTF-16).
# Pour rendre le log lisible dans TOUS les éditeurs (Notepad, VS Code, Notepad++),
# on le reconvertit automatiquement en UTF-8 avec BOM.
# -------------------------------------------------------------------
$content = Get-Content -Path $logfile -Raw -Encoding Unicode
$utf8BOM = New-Object System.Text.UTF8Encoding($true) # $true => avec BOM
[System.IO.File]::WriteAllText($logfile, $content, $utf8BOM)
# -------------------------------------------------------------------
# Vérification du résultat et notification graphique
# Codes retour Robocopy :
# 0 = Rien à copier (déjà à jour)
# 1-3 = Succès (avec nouveaux fichiers / suppressions)
# >3 = Erreurs
# -------------------------------------------------------------------
if ($exitCode -le 3) {
[System.Windows.Forms.MessageBox]::Show(
"✅ Sauvegarde miroir terminée avec succès.`nLog : $logfile",
"Sauvegarde-Miroir",
[System.Windows.Forms.MessageBoxButtons]::OK,
[System.Windows.Forms.MessageBoxIcon]::Information
)
} else {
[System.Windows.Forms.MessageBox]::Show(
"⚠️ Erreurs détectées pendant la sauvegarde.`nConsultez le log : $logfile",
"Sauvegarde-Miroir",
[System.Windows.Forms.MessageBoxButtons]::OK,
[System.Windows.Forms.MessageBoxIcon]::Error
)
}
Ce script sauvegarde un dossier en mode miroir vers un disque externe. Il utilise Robocopy, l’outil officiel de Microsoft, robuste et fiable.
Les fichiers supprimés dans la source le seront aussi dans la sauvegarde → c’est un vrai clone.
Le script génère un fichier log en UTF-8 BOM (lisible partout) grâce à l’option /UNILOG et une petite conversion automatique.
Une fenêtre s’affiche à la fin pour indiquer succès ou erreurs.
- $source (ton dossier à sauvegarder)
- $destination (ton dossier de sauvegarde, ex. disque externe)
- $logfile (chemin et nom du fichier log)
- Enregistrer le code dans un fichier txt avec l'extension .ps1 par exemple Sauvegarde-Miroir.ps1
- Clic droit sur l'icône du fichier et commande Exécuter avec PowerShell
- Le script se ferme à la fin des opérations.
Perso il tourne à 13:00 et 21:00 tous les jours ...
En espérant que cela vous rende service,