Cara membuat arsip ZIP menggunakan PowerShell

PowerShell 5.0 (disertakan dengan Windows Management Framework 5.0, yang disertakan secara default di Windows 10) memiliki modul terpisah Microsoft.PowerShell.Archive, yang memungkinkan Anda untuk membuat dan mengekstrak arsip ZIP dari baris perintah atau di dalam skrip PowerShell. Daftar cmdlet yang tersedia di modul Microsoft.PowerShell.Archive (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ Microsoft.PowerShell.Archive) dapat diperoleh dengan menggunakan Get-Command.

Dapatkan-Perintah -Module Microsoft.PowerShell.Archive | Format-Tabel -AutoSize;

Sumber Versi Nama CommandType
- --             -- -
Fungsi Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Fungsi Expand-Archive 1.0.0.0 Microsoft.PowerShell.Archive

Seperti yang bisa kita lihat, dua cmdlet tersedia, nama-nama yang berbicara sendiri:

  • Arsip Kompres
  • Perluas Arsip

Mari kita lihat contoh penggunaan cmdlet ini untuk membuat / unzip arsip ZIP dari file atau direktori yang ditentukan.

Format perintah Arsip Kompres berikut ini:

String Compress-Archive [-Path] [] [-PestinationPath] String [-CompressionLevel String] [-Perbarui]

Dalam parameter Path file sumber yang akan dikemas ditentukan, -DestinationPath -lokasi file arsip yang dibuat, Tingkat kompresi - tingkat kompresi (Kompresi No, Optimal atau Tercepat). Parameter -Perbarui memungkinkan Anda untuk menambah / memperbarui file dalam arsip ZIP yang ada. Dengan kunci -Paksaan, jika arsip dengan nama yang ditentukan sudah ada, itu akan ditimpa.

Kiat. Level kompresi NoCompression, sebagai aturan, harus digunakan untuk menggabungkan file yang sudah dikompresi (jpg, msi, mp3, dll.) Ke dalam file arsip tunggal, sehingga sistem tidak membuang waktu mencoba untuk mengompresnya.

Contoh perintah untuk mengompresi satu file:

Compress-Archive -Path C: \ Logs \ Update.log -DestinationPath C: \ Archive \ logs.zip -CompressionLevel Optimal


Kompres seluruh isi direktori:

Compress-Archive -Path C: \ Logs -DestinationPath C: \ Archive \ logs-all.zip -CompressionLevel Optimal

Anda dapat mengompres file dengan mask tertentu. Misalnya, Anda hanya perlu mengemas file dengan ekstensi * .txt.

Compress-Archive -Path C: \ Logs \ *. Txt -DestinationPath C: \ Archive \ logs-txt.zip -CompressionLevel Tercepat

Catatan. Karena modul Microsoft.PowerShell.Archive menggunakan panggilan ke kelas System.IO.Compression.ZipArchive, tidak akan mungkin untuk mengompres file yang lebih besar dari 2 GB. Jika Anda mencoba mengompres file yang lebih besar, kesalahan akan muncul
Pengecualian memanggil "Tulis" dengan argumen "3": "Aliran terlalu panjang."
Di C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modul \ Microsoft.PowerShell.Archive \ Microsoft.PowerShell.Archive.psm1: 805
char: 29
+... $ destStream.Write ($ buffer, 0, $ numberOfBytesRead)
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: IOException

Untuk membuka zip arsip ZIP, gunakan cmdlet Perluas Arsip.
Format perintah:

Expand-Archive [-Path] String [-DestinationPath] String [-Force] [-Confirm]

Misalnya, untuk unzip arsip zip yang dibuat sebelumnya dengan menimpa file di direktori target:

Expand-Archive -Path C: \ Scripts \ test1.zip -DestinationPath c: \ scripts -Force

Dari kekurangan modul pengarsipan versi ini, perlu dicatat:

  • Tidak dapat melihat konten arsip tanpa membukanya
  • Sebagian file tidak dapat diekstraksi dari arsip (hanya dekompresi penuh)
  • Anda tidak dapat menggunakan format arsip lain selain zip

Dalam versi Poweshell sebelumnya, Anda dapat menggunakan kelas NET Framework 4.5 untuk mengkompresi / mendekompresi file zip File zip. Format untuk menggunakan kelas adalah sebagai berikut.

Kami kemas file ke dalam arsip:

Add-Type -Assembly "system.io.compression.filesystem"
$ src = “C: \ Logs”
$ dst = “C: \ Archive \ test.zip”
[io.compression.zipfile] :: CreateFromDirectory ($ src, $ dst)

Anda dapat membuka zip arsip ZIP sebagai berikut:

Add-Type -Assembly "system.io.compression.filesystem"
$ src = "C: \ Archive \ test.zip"
$ dst = "C: \ Logs \ Archve"
[io.compression.zipfile] :: ExtractToDirectory ($ src, $ dst)