Compression ZIP simplement en Powershell

I. Présentation

PowerShell est un langage puissant qui permet d'automatiser bien des actions sur les OS Windows. Aujourd'hui, nous allons voir comment utiliser PowerShell pour le backup et l'archivage, notamment via la compression ZIP.  Nous utiliserons pour cela la fonction PowerShell "io.compression.zipfile".

II. Compression ZIP via Powershell

Concrètement, ces deux lignes pourront nous permettre de compresser un dossier :

[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder, $destinationZip)

Naturellement, il faut pour cela définir les variables source et destination :

$sourceFolder = "C:\Users\Mickael\Pictures\"
$destinationZip = "C:\Users\Mickael\Documents\archive.zip"
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder, $destinationZip)

L'exécution de ces quelques lignes compressera le dossier  "C:\Users\Mickael\Pictures" dans l'archive "archive.zip".

III. Fonction de compression

Nous pouvons très rapidement en faire une fonction   :

function backupMe ($backupDir, $destinationFile) {
   [Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
   [System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder, $destinationZip)
}

Celle-ci pourra donc être appelée via le code suivant à condition que les variables "sourceFolder" et "destinationZip" soient définies :

backupMe($sourceFolder, $destinationZip)

Une petite amélioration supplémentaire qui peut être effectuée est d'ajouter une date au nommage de l'archive, cela permettra d'avoir un versionning très facilement et de ne pas avoir à supprimer l'ancienne archive lors d'une seconde exécution :

$Today = Get-Date -UFormat "%Y-%m-%d"
$sourceFolder = "C:\Users\Mickael\Pictures\"
$destinationZip = "C:\Users\Mickael\Documents\archive-$Today.zip"
backupMe($sourceFolder, $destinationZip)

J'espère que ces quelques lignes vous serons utiles ! N'hésitez pas à proposer vos améliorations dans le forum ou les commentaires.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 526.Voir tous les posts

3 thoughts on “Compression ZIP simplement en Powershell

  • Intéressant 🙂

    Il est également possible de travailler avec un ZIP hebdomadaire portant le numéro de la semaine en cours (numérotation ISO 8601, en usage en France), avec par exemple :

    $numSem = Get-Date -UFormat %V
    $destinationZip = « C:\Users\Mickael\Documents\archive-$numSem.zip »

    Répondre
  • Bonjour Mickael,
    Très intéressant et en plus ça fonctionne …
    Quelle seraient les variables à préciser si l’onveut que l’heure de la compression apparaissent également dans le nommage du fichier ?
    Sinon, vous connaissez un répertoire sur le net répertoriant l’ensemble des fonctions gérables avec PowerShell ? (déplacer, renommer, suppromer un fichier/répertoire, etc …).
    A bientôt,
    Cdlt,
    Patrice

    Répondre
  • Hello,
    Pour la réutiliser la fonction pour plusieurs backup par exemple en PS V4 :

    $sourceFolder = « E:\test »
    $destinationZip = « E:\test.zip »

    function CreateZip ($SRC, $DEST) {
    [Reflection.Assembly]::LoadWithPartialName( « System.IO.Compression.FileSystem » )
    [System.IO.Compression.ZipFile]::CreateFromDirectory($SRC, $DEST)
    }

    CreateZip $sourceFolder $destinationZip

    Gestion des paramètes pour une fonction :
    https://webdevdesigner.com/q/how-do-i-pass-multiple-parameters-into-a-function-in-powershell-11230/

    Répondre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.