Soru Powershell'de dosyaları nasıl zip / unzip?


PowerShell'de zip / unzip dosyaları (* .zip) olacak bir tek liner var mı?


103
2018-06-03 15:57


Menşei


ilgili: Sunucu Çekirdeğinde PS ile Unzip - Ruben Bartelink


Cevaplar:


DotNetZip bunu PowerShell'den yapmanıza izin verecektir. Tek liner değildir, ancak kütüphane ihtiyacınız olan PowerShell komut dosyasını yazmanıza izin verir.

COM arayüzünü de kullanabilirsiniz, bkz. Windows PowerShell ile Dosyaları sıkıştırın ve bir Windows Vista Kenar Çubuğu Gadget'ı paketleyin.

Googling "zip powershell" veya "unzip powershell" de yararlı sonuçlar verebilir.


21
2018-06-03 16:02



+1 Bağlantılı makalede, en yüksek yanıtın aksine yararlı görevler var - Ruben Bartelink
Bir Google araması önermek için -1. Bu, "unzip powershell" için bir Google aramada en iyi StackExchange sonucudur - machine yearning


Bu, herhangi bir harici araç olmadan tamamen Powershell'den nasıl yapabilirsiniz. Bu, mevcut çalışma dizinine test.zip adlı bir dosyayı açar:

$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())

154
2017-11-14 01:36



Varolan dosyaların üzerine yazmak için $ destination.Copyhere ($ zip_file.items (), 0x10) kullanın. 0x4 iletişim kutusunu gizler ve 0x14 bunları birleştirir ve iletişim kutusunu gizler. - Peter
Çizgi $destination.Copyhere($zip_file.items()) gerçek unziping yapar. - Jonathan Allen
İstediğinizde yukarıdakileri bir işlev haline getirebilirsiniz: 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
Bu kabul edilen cevap olmalı. - tugberk
Zip dosyası sadece bir klasör içerdiğinde bu benim için başarısız olur (öğeler boş) - James Woolfenden


Şimdi .NET Framework 4.5'de bir Sıkıştırılmış dosya Bu şekilde kullanabileceğiniz sınıf:

[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)

56
2017-12-30 17:46



O kesinlikle çalıştı - Ben 400 zip dosyaları ayıklamak için kullandım. Burada 4.5 olmadığından emin olmak için kontrol edeceğim, ancak Microsoft.NET altında görünmüyor. - GalacticCowboy
Bu olur ExtractToDirectory için basit bir yöntem ve varolan tüm dosyaların üzerine yazmak için bir seçenek olsaydı harika ol. - James Dunne
Montajı Add-Type ile yükleyin, örneğin: Add-Type -AssemblyName System.IO.Compression.FileSystem - Mike
@JamesDunne - Korumanız gereken başka dosyalarınız yoksa 'Remove-Item -Recurse $ TargetFolder' kullanabilirsiniz. Aksi takdirde, istediğiniz şey yapılabilir, ancak önemsiz olacaktır. Okumak için zip dosyasını açmanız ve ardından zip'i, önceki hedef nesneyi silerek ve yenisini açmanız gerekir. Benim için şanslı, kolay çözüm çalışıyor. ;) - Mike
Göreli dosya konumlarının kullanacağı konusunda uyarılmalıdır. .AĞ geçerli dizin değil PowerShell bir. Görmek İşte. Muhtemelen sadece daha iyi (Resolve-Path $someDir).Path argümanlar. - jpmc26


Kontrol etmek isteyebilirsiniz PowerShell Topluluk Uzantıları (PSCX) Özellikle bunun için cmdlet'ler vardır.


18
2018-06-03 15:59



+1 PSCX harika bir eklenti cmdletleri setidir - sadece istediğim ve seçmediğim şeyleri seçip seçebilseydim. Powershell örneğimde bir çok şey değişiyor gibi görünüyor. - marc_s
Buna rastladım çünkü bazı iş arkadaşları için yapabileceğim PSCX kurulumunu otomatikleştirmek istiyorum. Ne tür sorunlarla karşılaştığımı görmek için şimdi deniyorum - jcolebrand


Bunun çok eski bir soru olduğunu biliyorum, ama Twitter'da bağlantı kurarak yeni bir cevap yazdığımı gördüm.

PowerShell 5, şu anda Windows 10 üzerinde veya Windows Management Framework 5 Üretim Önizlemesi, 'sıkıştırma' ve 'unzipping' için iki yerleşik cmdlet ile birlikte gelir:


14
2017-10-17 20:59



Bu bir iyi eski sorulara yeni bilgi sağlamak için bir şey. ;) +1 - jpmc26


Yıllarca kullanmış olduğum ve UNIX ortamında kullandığım infozip ikili dosyalarını kullanmak için en basit çözümü buluyorum.

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.

Metin çıktısı etrafında bir powershell sarıcısı koymak çok zor olurdu ama pratikte buna asla ihtiyacım olmadı ki bu yüzden rahatsız olmadım.

http://www.info-zip.org/


5
2017-08-03 19:40





Ben de severim Bilgi-Posta (Zip motoru diğer Zip yardımcı programlarında bulunur) ve 7-Posta, hem bir GUI hem de komut satırı Zip yardımcı programı olan bir başka favori. Buradaki nokta, çoğu PowerShell görevi için çalışacak bazı iyi komut satırı yardımcı programları vardır.

PowerShell ile oluşturulmayan komut satırı yardımcı programlarını çalıştırmak için bazı hileler vardır:

  • Adında bir sayı ile başlayan bir çalıştırılabilir çalıştırarak, bir Ampersand (&) ile önsöz.

    & 7zip.exe

  • Her belirteci sarın, yardımcı program komut satırından görmeyi beklemektedir.

    & "c: \ yolu ile boşluk" SomeCommand.exe "" / parameter2 "" / parameter2 "" parameter2'nin Değeri "" Value2 `" bir alıntıyla "

Bunu dene:

zip filename.zip (Get-ChildItem somepath\*)

Ya da:

zip filename.zip (Get-Content ListOfFiles.txt)

5
2017-08-11 15:07





James Holwell Cevabını beğendim ama biraz genişlettim

# Example
#unzip "myZip.zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
    $shell = new-object -com shell.application
    if (!(Test-Path "$sourcePath\$fileName"))
    {
        throw "$sourcePath\$fileName does not exist" 
    }
    New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
    $shell.namespace($destinationPath).copyhere($shell.namespace("$sourcePath\$fileName").items()) 
}

2
2017-10-11 17:56





WinRAR CMD modunda argüman kabul edebilir


0
2017-08-03 19:49





İyonik yaklaşım kayalar:

https://dotnetzip.codeplex.com/wikipage?title=PS-Examples

şifreleri, diğer şifreleme yöntemlerini vb. destekler.


0
2018-01-13 22:53





Dosyaları eşzamanlı olarak sıkıştırmak ve sıkıştırmak için yerel Windows işletim sistemi komutlarını kullanan bir PowerShell 2.0 uyumlu modül oluşturdum. Bu, Windows XP gibi eski işletim sistemlerinde çalışır ve .Net 4.5 veya başka bir harici araç gerektirmez. İşlevler, dosyaların tümü sıkıştırılmış / açılıncaya kadar kod yürütmeyi de engelleyecektir. Yapabilirsin blogumdaki daha fazla bilgi ve modülü burada bulabilirsiniz.


0
2018-05-02 22:13