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.
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 »
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
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/