Deuxième édition - Ce code est un vilain, vilain kluge des temps anciens. Vous n'en voulez pas.
Ceci compresse le contenu de .\in
a .\out.zip
avec System.IO.Packaging.ZipPackage en suivant l'exemple aquí
$zipArchive = $pwd.path + "\out.zip"
[System.Reflection.Assembly]::Load("WindowsBase,Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
$ZipPackage=[System.IO.Packaging.ZipPackage]::Open($zipArchive,
[System.IO.FileMode]"OpenOrCreate", [System.IO.FileAccess]"ReadWrite")
$in = gci .\in | select -expand fullName
[array]$files = $in -replace "C:","" -replace "\\","/"
ForEach ($file In $files)
{
$partName=New-Object System.Uri($file, [System.UriKind]"Relative")
$part=$ZipPackage.CreatePart($partName, "application/zip",
[System.IO.Packaging.CompressionOption]"Maximum")
$bytes=[System.IO.File]::ReadAllBytes($file)
$stream=$part.GetStream()
$stream.Write($bytes, 0, $bytes.Length)
$stream.Close()
}
$ZipPackage.Close()
Editar: Peu fiable pour les fichiers plus importants, peut-être >10mb, YMMV. Quelque chose à faire avec une preuve de domaine d'application et un stockage isolé. La version 4.5 de .NET, plus conviviale approche fonctionne bien à partir de PS v3, mais je voulais plus de mémoire dans mon cas. Pour utiliser .NET 4 à partir de PS v2, les fichiers de configuration doivent être modifiés. non pris en charge tweak .
0 votes
Un échantillon avec le code source complet ?