DotNetZip akan memungkinkan Anda melakukan ini dari PowerShell. Ini bukan satu-liner, tetapi perpustakaan akan memungkinkan Anda untuk menulis skrip PowerShell yang Anda butuhkan.
+1 Artikel yang ditautkan memiliki Tugas yang berguna, tidak seperti jawaban yang paling banyak dipilih
Ruben Bartelink
5
-1 untuk menyarankan pencarian Google. Ini adalah hasil StackExchange teratas dalam pencarian Google untuk "unzip powershell"
mesin merindukan
154
Ini adalah bagaimana Anda dapat melakukannya sepenuhnya dari Powershell tanpa alat eksternal. Ini membuka ritsleting file bernama test.zip ke direktori kerja saat ini:
gunakan $ destination.Copyhere ($ zip_file.items (), 0x10) untuk menimpa file yang ada. 0x4 menyembunyikan kotak dialog, dan 0x14 menggabungkan ini dan menimpa dan menyembunyikan dialog.
Peter
3
Garis $destination.Copyhere($zip_file.items())melakukan unzip yang sebenarnya.
Jonathan Allen
2
Anda dapat membagi paket di atas menjadi sebuah fungsi, jika Anda menginginkan: function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
James Holwell
6
Ini harus menjadi jawaban yang diterima.
tugberk
2
Ini gagal bagi saya ketika file zip hanya berisi folder (item kosong)
James Woolfenden
56
Sekarang di .NET Framework 4.5, ada kelas ZipFile yang bisa Anda gunakan seperti ini:
Ini akan bagus jika ada metode sederhana untuk ExtractToDirectory dan opsi untuk menimpa semua file yang ada.
James Dunne
1
Ini bekerja dengan .NET 4.5. Namun Anda perlu Powershell V3 juga.
DalSoft
3
Muat unit dengan Add-Type, misalnya: Add-Type -AssemblyName System.IO.Compression.FileSystem
Mike
2
@JamesDunne - Jika Anda tidak memiliki file lain yang perlu Anda pertahankan, dapat menggunakan 'Remove-Item -Recurse $ TargetFolder'. Kalau tidak, apa yang Anda inginkan dapat dilakukan, tetapi itu tidak sepele. Anda harus membuka zip untuk dibaca, dan kemudian berjalan zip, menghapus objek target sebelumnya dan membongkar yang baru. Beruntung bagi saya, solusi mudahnya bekerja. ;)
Mike
3
Berhati-hatilah karena lokasi file relatif akan menggunakan direktori .NET saat ini, bukan direktori PowerShell. Lihat di sini . Mungkin lebih baik hanya dengan (Resolve-Path $someDir).Pathargumen.
+1 PSCX adalah seperangkat add-on cmdlet yang bagus - Saya hanya berharap saya bisa memilih yang mana yang saya inginkan dan yang tidak. Ini tampaknya akan berubah jauh dalam hal Powershell saya ....
marc_s
Saya sudah menemukan ini karena saya benar-benar ingin mengotomatisasi instalasi PSCX jika saya bisa untuk beberapa rekan kerja. Mencoba sekarang untuk melihat masalah apa yang saya
temui
16
Saya tahu ini adalah pertanyaan yang sangat lama, tetapi saya baru saja melihatnya tertaut di Twitter dengan alasan saya akan memposting jawaban saat ini.
Merupakan hal yang baik untuk memberikan informasi baru ke pertanyaan lama. ;) +1
jpmc26
5
Saya menemukan solusi paling sederhana untuk hanya menggunakan binari infozip yang telah saya gunakan selama bertahun-tahun dan digunakan dalam lingkungan UNIX.
PS> zip -9r../test.zip *
PS> cd ..
PS> unzip -t test.zip Archive: test.zip
testing:LinqRepository/ OK
testing:LinqRepository/ApplicationService.cs OK
testing:LinqRepository/bin/ OK
...No errors detected in compressed data of test.zip.
Akan sangat sulit untuk menempatkan pembungkus PowerShell di sekitar output teks tetapi dalam prakteknya saya tidak pernah membutuhkannya sehingga saya tidak merasa terganggu.
Saya juga suka Info-ZIP (mesin Zip yang ditemukan di sebagian besar utilitas Zip lainnya) dan 7-Zip , favorit lain yang memiliki kedua utilitas GUI dan baris perintah Zip. Intinya adalah, ada beberapa utilitas baris perintah yang baik yang akan bekerja untuk sebagian besar tugas PowerShell.
Ada beberapa trik untuk menjalankan utilitas baris perintah yang tidak dibangun dengan mempertimbangkan PowerShell:
Menjalankan executable yang dimulai dengan nomor dalam nama, kata pengantar dengan Ampersand (&).
& 7zip.exe
Bungkus setiap token, utilitas mengharapkan untuk melihat dari baris perintah, dalam tanda kutip.
& "c: \ path with space \ SomeCommand.exe" "/ parameter2" "/ parameter2" "Nilai parameter2" "Value2` "dengan penawaran"
Saya telah membuat modul yang kompatibel dengan PowerShell 2.0 yang menggunakan perintah OS Windows asli untuk zip dan unzip file secara sinkron. Ini berfungsi pada OS lama, seperti Windows XP, dan tidak memerlukan. Net 4.5 atau alat eksternal lainnya. Fungsi-fungsi ini juga akan memblokir eksekusi skrip sampai semua file di-zip / di-zip. Anda dapat menemukan informasi lebih lanjut dan modul di blog saya di sini .
Jawaban:
DotNetZip akan memungkinkan Anda melakukan ini dari PowerShell. Ini bukan satu-liner, tetapi perpustakaan akan memungkinkan Anda untuk menulis skrip PowerShell yang Anda butuhkan.
Anda juga dapat menggunakan antarmuka COM, lihat Mengkompres File dengan Windows PowerShell kemudian mengemas Windows Vista Sidebar Gadget .
Googling "zip powershell" atau "unzip powershell" juga dapat menampilkan hasil yang bermanfaat.
sumber
Ini adalah bagaimana Anda dapat melakukannya sepenuhnya dari Powershell tanpa alat eksternal. Ini membuka ritsleting file bernama test.zip ke direktori kerja saat ini:
sumber
$destination.Copyhere($zip_file.items())
melakukan unzip yang sebenarnya.function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
Sekarang di .NET Framework 4.5, ada kelas ZipFile yang bisa Anda gunakan seperti ini:
sumber
(Resolve-Path $someDir).Path
argumen.Anda mungkin ingin memeriksa The PowerShell Community Extensions (PSCX) yang memiliki cmdlet khusus untuk ini.
sumber
Saya tahu ini adalah pertanyaan yang sangat lama, tetapi saya baru saja melihatnya tertaut di Twitter dengan alasan saya akan memposting jawaban saat ini.
PowerShell 5, saat ini tersedia di Windows 10 atau melalui Pratinjau Produksi Windows Management Framework 5 , dilengkapi dengan dua cmdlet bawaan untuk 'zipping' dan 'unzipping':
sumber
Saya menemukan solusi paling sederhana untuk hanya menggunakan binari infozip yang telah saya gunakan selama bertahun-tahun dan digunakan dalam lingkungan UNIX.
Akan sangat sulit untuk menempatkan pembungkus PowerShell di sekitar output teks tetapi dalam prakteknya saya tidak pernah membutuhkannya sehingga saya tidak merasa terganggu.
http://www.info-zip.org/
sumber
Saya juga suka Info-ZIP (mesin Zip yang ditemukan di sebagian besar utilitas Zip lainnya) dan 7-Zip , favorit lain yang memiliki kedua utilitas GUI dan baris perintah Zip. Intinya adalah, ada beberapa utilitas baris perintah yang baik yang akan bekerja untuk sebagian besar tugas PowerShell.
Ada beberapa trik untuk menjalankan utilitas baris perintah yang tidak dibangun dengan mempertimbangkan PowerShell:
Menjalankan executable yang dimulai dengan nomor dalam nama, kata pengantar dengan Ampersand (&).
& 7zip.exe
Bungkus setiap token, utilitas mengharapkan untuk melihat dari baris perintah, dalam tanda kutip.
& "c: \ path with space \ SomeCommand.exe" "/ parameter2" "/ parameter2" "Nilai parameter2" "Value2` "dengan penawaran"
Coba ini:
Atau bahkan:
sumber
James Holwell Saya suka jawaban Anda tetapi saya sedikit memperluasnya
sumber
WinRAR dapat bekerja dalam mode CMD menerima argumen
sumber
Batuan pendekatan ionik:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
mendukung kata sandi, metode crypto lainnya, dll.
sumber
Saya telah membuat modul yang kompatibel dengan PowerShell 2.0 yang menggunakan perintah OS Windows asli untuk zip dan unzip file secara sinkron. Ini berfungsi pada OS lama, seperti Windows XP, dan tidak memerlukan. Net 4.5 atau alat eksternal lainnya. Fungsi-fungsi ini juga akan memblokir eksekusi skrip sampai semua file di-zip / di-zip. Anda dapat menemukan informasi lebih lanjut dan modul di blog saya di sini .
sumber