Créer un script PowerShell pour sauvegarder automatiquement un site WordPress hébergé localement

Par Xavier Deloffre

Lorsqu’on développe un site WordPress en local, on a tendance à négliger les sauvegardes. Pourtant, un crash de disque dur, une erreur de manipulation ou une mise à jour défectueuse peut ruiner plusieurs jours, voire semaines, de travail. Automatiser la sauvegarde locale de son site WordPress avec un script PowerShell est une solution simple, rapide à mettre en œuvre, et particulièrement efficace. Ce script peut non seulement archiver les fichiers du site, mais aussi exporter la base de données MySQL/MariaDB et envoyer l’ensemble vers un espace de stockage distant ou un service cloud. Dans cet article, nous allons concevoir un script complet, commenté étape par étape, adapté aux environnements Windows, et intégrable à une tâche planifiée. Que vous soyez développeur freelance, intégrateur ou technicien web, cette approche peut grandement sécuriser votre workflow de développement local.

Pourquoi automatiser les sauvegardes locales de WordPress avec PowerShell ?

En local, les sauvegardes manuelles sont souvent perçues comme une perte de temps, surtout lorsqu’on travaille sur des versions de développement ou des prototypes. Pourtant, les risques sont bien réels : fichiers supprimés par erreur, conflits lors de la synchronisation Git, corruption de base de données après un test de plugin… Sans sauvegarde, il est souvent impossible de revenir en arrière rapidement. C’est là que PowerShell intervient comme un allié précieux. Utiliser PowerShell pour automatiser les sauvegardes de votre site WordPress présente plusieurs avantages :

  • Gain de temps : Une fois le script écrit, tout se fait en un clic (ou même sans clic si la tâche est planifiée) ;
  • Fiabilité : Vous vous assurez de sauvegarder à la fois les fichiers et la base de données, avec une structure propre et horodatée ;
  • Flexibilité : Le script peut être enrichi selon vos besoins : notifications, compression avancée, transfert distant, etc.
  • Adaptabilité : Vous pouvez l’utiliser pour plusieurs sites en local en modifiant simplement les variables de configuration.

Contrairement aux plugins de sauvegarde WordPress, qui ne sont pas conçus pour l’environnement local ou qui nécessitent des interfaces graphiques, PowerShell s’intègre directement dans le système Windows. Il peut dialoguer avec les fichiers du système, les outils de base de données, les dossiers synchronisés avec le cloud, et les planificateurs de tâches. En d’autres termes, il vous permet de traiter la sauvegarde comme une vraie routine professionnelle, même en local.

Automatiser les sauvegardes est aussi une excellente habitude à prendre dans une optique DevOps, où chaque tâche répétitive est une opportunité d’automatisation. Cela libère du temps pour l’essentiel : coder, tester, livrer.

avantages automatisations sauvegardes worpress powershell

Préparer son environnement local WordPress pour la sauvegarde

Avant de plonger dans l’écriture de notre script PowerShell, il est essentiel de bien comprendre ce que l’on doit sauvegarder dans un site WordPress, et pourquoi. WordPress repose sur une structure biface : d’un côté, des fichiers hébergés sur le disque (le « code » et les médias), de l’autre, une base de données relationnelle qui stocke tout le contenu dynamique du site (articles, pages, utilisateurs, options, menus, etc.). Une sauvegarde complète implique donc l’archivage de ces deux éléments, sans quoi une restauration serait incomplète ou impossible.

Voici les deux composants incontournables à prendre en compte :

  • Le dossier contenant les fichiers WordPress : Il inclut le noyau WordPress (les fichiers système), les plugins installés, les thèmes actifs ou non, et surtout le dossier wp-content/uploads qui contient tous les médias ajoutés (images, vidéos, documents). Ces fichiers doivent être sauvegardés avec leur structure intacte ;
  • La base de données MySQL ou MariaDB : C’est le cœur de votre site. Elle contient tout le contenu éditorial, la configuration du site, les commentaires, les utilisateurs, et même les options de personnalisation des thèmes et extensions. Son export est indispensable pour une sauvegarde fiable.

Dans un environnement de développement local, ces éléments résident généralement sur votre machine personnelle, souvent dans un environnement tel que XAMPP, WampServer, Laragon ou encore MAMP pour macOS. Ces solutions regroupent un serveur Apache ou Nginx, PHP et MySQL/MariaDB, permettant de faire tourner un site WordPress comme sur un hébergement web classique.

À titre d’exemple, nous allons supposer que votre site WordPress local est installé dans :

  • C:\Sites\mon-site-wordpress – le dossier racine contenant tous les fichiers WordPress
  • Et que la base de données associée se nomme mon_site_db

Ces chemins peuvent naturellement varier selon votre configuration. Il est recommandé de centraliser tous vos projets WordPress locaux dans un répertoire unique (par exemple C:\Sites\ ou D:\Projets\WP\) pour simplifier la gestion et les sauvegardes.

Vérifiez bien que l’outil mysqldump.exe, indispensable pour l’exportation de la base de données, est accessible. Il est généralement situé dans le sous-dossier mysql\bin de votre environnement local (par exemple C:\xampp\mysql\bin\mysqldump.exe). Vous pouvez soit ajouter ce chemin à votre variable d’environnement PATH de Windows, soit le renseigner en dur dans le script pour plus de précision. Dans tous les cas, le bon fonctionnement de cette commande est fondamental pour générer une copie exploitable de la base.

Une fois ces éléments identifiés et confirmés, vous êtes prêt à automatiser la sauvegarde complète de votre site WordPress local grâce à PowerShell. Le script pourra ainsi fonctionner en arrière-plan, de manière régulière, sans intervention manuelle.

preparer environnement local pour sauvegarde

Écrire le script PowerShell étape par étape

Maintenant que l’environnement est bien préparé, nous allons écrire un script PowerShell structuré, capable de sauvegarder automatiquement tous les éléments essentiels de votre site WordPress local. L’objectif est de créer une solution robuste, adaptable, et facile à intégrer dans vos habitudes de travail. Ce script peut être exécuté manuellement ou automatiquement via le Planificateur de tâches Windows.

Concrètement, le script PowerShell va accomplir les actions suivantes :

  1. Définir les chemins des fichiers, dossiers et éléments à sauvegarder.
  2. Créer un dossier de sauvegarde unique basé sur la date et l’heure.
  3. Créer une archive ZIP contenant tous les fichiers du site WordPress.
  4. Exporter la base de données MySQL/MariaDB au format SQL.
  5. Copier les sauvegardes vers un emplacement cloud ou distant (facultatif).
  6. Nettoyer automatiquement les anciennes sauvegardes au-delà d’un certain âge (facultatif).
  7. Planifier l’exécution automatique du script avec Windows Task Scheduler.

Nous allons maintenant détailler chaque étape du script, avec des explications claires et un code lisible que vous pourrez facilement adapter à vos besoins.

1. Paramétrage des variables

Cette première étape permet de définir les chemins de base, les identifiants de la base de données et le formatage des noms de fichiers. Il est recommandé d’utiliser des variables bien nommées pour rendre le script plus lisible et plus facilement modifiable.

# Paramètres principaux
$Date = Get-Date -Format "yyyyMMdd-HHmm"
$SitePath = "C:\Sites\mon-site-wordpress"
$BackupRoot = "C:\Backups\WordPress"
$BackupFolder = "$BackupRoot\backup-$Date"
$ZipPath = "$BackupFolder\site-files.zip"
$DbName = "mon_site_db"
$DbUser = "root"
$DbPassword = "root"
$MySqlDumpPath = "C:\xampp\mysql\bin\mysqldump.exe"
$SqlFile = "$BackupFolder\db-$DbName.sql"

Petite astuce : Vous pouvez stocker les identifiants de base de données dans un fichier externe chiffré ou utiliser des variables d’environnement pour plus de sécurité.

2. Création des dossiers de sauvegarde

Avant de générer les fichiers de sauvegarde, le script crée un sous-dossier spécifique daté, afin de séparer chaque session de sauvegarde. Cela permet de conserver un historique clair et d’éviter l’écrasement de fichiers précédents.

# Créer le dossier de sauvegarde
if (!(Test-Path $BackupFolder)) {
    New-Item -ItemType Directory -Path $BackupFolder | Out-Null
}

Cette approche garantit également que toutes les sauvegardes sont bien organisées chronologiquement, ce qui facilite les restaurations ponctuelles.

3. Archivage des fichiers du site

La commande Compress-Archive est utilisée pour compresser tous les fichiers WordPress dans une archive ZIP. Cela inclut le cœur de WordPress, les plugins, les thèmes et le contenu multimédia. Cela permet de conserver une copie complète et exploitable du site.

# Archiver les fichiers WordPress
Compress-Archive -Path "$SitePath\*" -DestinationPath $ZipPath

Assurez-vous que le dossier $SitePath ne contient pas de fichiers verrouillés par d’autres processus (ex. : éditeurs de texte ou serveurs actifs), ce qui pourrait empêcher la compression.

4. Exportation de la base de données WP

La base de données WordPress est exportée à l’aide de l’outil mysqldump. Le résultat est un fichier texte SQL que vous pourrez importer ultérieurement via phpMyAdmin ou ligne de commande.

# Exporter la base de données
$DumpCommand = "`"$MySqlDumpPath`" --user=$DbUser --password=$DbPassword $DbName > `"$SqlFile`""
cmd.exe /c $DumpCommand

Attention : L’utilisation du mot de passe en ligne de commande peut représenter un risque de sécurité sur des systèmes partagés. Pour plus de sécurité, pensez à utiliser un fichier de configuration sécurisé ou les options de login path (mysql_config_editor).

5. (Optionnel) Envoi vers un stockage cloud ou distant

Il peut être utile d’envoyer vos sauvegardes sur un service cloud (OneDrive, Dropbox, Google Drive) ou sur un NAS, afin de prévenir les pertes de données en cas de problème matériel. Si le service cloud est déjà synchronisé avec un dossier local, une simple copie suffit.

# Copier dans le dossier synchronisé (exemple OneDrive)
$CloudFolder = "$env:USERPROFILE\OneDrive\Backups\WordPress"
Copy-Item -Path $ZipPath -Destination $CloudFolder -Force
Copy-Item -Path $SqlFile -Destination $CloudFolder -Force

Pour des solutions plus avancées, comme l’envoi SFTP vers un serveur distant ou le transfert vers Amazon S3 ou Azure Blob Storage, il faudra intégrer des modules complémentaires (ex. : WinSCPnet.dll, Az PowerShell, ou l’outil rclone).

6. Nettoyage automatique des anciennes sauvegardes (optionnel)

Sans rotation, votre dossier de sauvegarde peut vite devenir volumineux. Il est donc judicieux de supprimer automatiquement les dossiers vieux de plus de 7 jours (ou une autre durée selon vos besoins).

# Supprimer les sauvegardes de plus de 7 jours
Get-ChildItem -Path $BackupRoot -Directory | Where-Object {
    ($_.CreationTime -lt (Get-Date).AddDays(-7))
} | Remove-Item -Recurse -Force

Vous pouvez bien sûr modifier le nombre de jours, ou encore ne garder que les X dernières sauvegardes, en utilisant des fonctions de tri plus avancées.

7. Planification de l’exécution du script

Pour que ce processus soit réellement automatisé, il faut le déclencher régulièrement sans intervention manuelle. Le Planificateur de tâches Windows permet d’exécuter ce script chaque jour, ou selon n’importe quelle fréquence.

  • Ouvrir le Planificateur de tâches Windows.
  • Créer une nouvelle tâche basique ou avancée.
  • Définir un déclencheur (ex : tous les jours à 3h du matin).
  • Définir l’action : démarrer un programme.
  • Programme/script : powershell.exe
  • Ajouter des arguments : -ExecutionPolicy Bypass -File "C:\Scripts\backup-wordpress.ps1"
  • Cocher “Exécuter avec les privilèges les plus élevés”.

Pour les environnements critiques, vous pouvez également activer les alertes ou logs d’erreur en ajoutant des messages dans l’Observateur d’événements ou en envoyant des emails en cas d’échec.

A vous de jouer 🙂

Xavier Deloffre

Xavier Deloffre

Fondateur de Facem Web, agence implantée à Arras et à Lille (Hauts-de-France), je suis spécialiste du Web Marketing, formateur expérimenté, et blogueur reconnu dans le domaine du Growth Hacking. Passionné par le référencement naturel (SEO) que j'ai découvert en 2009, j'imagine et développe des outils web innovants afin d'optimiser la visibilité de mes clients dans les SERPs. Mon objectif principal : renforcer leur notoriété en ligne par des stratégies digitales efficaces et créatives.

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Besoin de visibilité ?

☑️ Experts du référencement

☑️ + de 12 ans d’éxpérience

☑️ + 500 clients satisfaits

☑️ Création de sites

☑️ Audit SEO

☑️ Conseil SEO

☑️ Référencement de sites

☑️ Devis gratuit