PowerShell 5.0 (dołączony do Windows Management Framework 5.0, który jest domyślnie dołączony do Windows 10) ma osobny moduł Microsoft.PowerShell.Archive, który pozwala tworzyć i rozpakowywać archiwa ZIP z wiersza poleceń lub ze skryptów PowerShell. Listę dostępnych poleceń cmdlet w module Microsoft.PowerShell.Archive (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ Microsoft.PowerShell.Archive) można uzyskać za pomocą Get-Command.
Get-Command-Moduł Microsoft.PowerShell.Archive | Format-Table -AutoSize;
- -- -- -
Funkcja Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Funkcja Expand-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Jak widzimy, dostępne są dwa polecenia cmdlet, których nazwy mówią same za siebie:
- Kompresuj Archiwum
- Rozwiń Archiwum
Spójrzmy na przykłady użycia tych poleceń cmdlet do tworzenia / rozpakowywania archiwów ZIP z określonych plików lub katalogów.
Format polecenia Kompresuj Archiwum następujące:
Compress-Archive [-Path] String [] [-DestinationPath] String [-CompressionLevel String] [-Update]
W parametrze Ścieżka pliki źródłowe do spakowania są określone, -DestinationPath -lokalizacja utworzonego pliku archiwum, CompressionLevel - poziom kompresji (bez kompresji, optymalny lub najszybszy). Parametr -Aktualizacja pozwala dodawać / aktualizować pliki w istniejącym archiwum ZIP. Z kluczem -Siła, jeśli archiwum o określonej nazwie już istnieje, zostanie zastąpione.
Wskazówka. Poziom kompresji NoCompression z reguły należy stosować do łączenia już skompresowanych plików (jpg, msi, mp3 itp.) W jeden plik archiwum, aby system nie tracił czasu na ich kompresowanie.Przykładowe polecenie kompresji pojedynczego pliku:
Compress-Archive -Path C: \ Logs \ Update.log -DestinationPath C: \ Archive \ logs.zip -CompressionLevel Optimal
Skompresuj całą zawartość katalogu:
Compress-Archive -Path C: \ Logs \ -DestinationPath C: \ Archive \ logs-all.zip -CompressionLevel Optimal
Możesz kompresować pliki za pomocą określonej maski. Na przykład musisz spakować tylko pliki z rozszerzeniem * .txt.
Compress-Archive -Path C: \ Logs \ *. Txt -DestinationPath C: \ Archive \ logs-txt.zip -CompressionLevel Najszybszy
Wyjątek wywołujący „Zapis” z argumentami „3”: „Strumień był za długi”.
W C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ Microsoft.PowerShell.Archive \ Microsoft.PowerShell.Archive.psm1: 805
char: 29
+... $ destStream.Write ($ buffer, 0, $ numberOfBytesRead)
+ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: IOException
Aby rozpakować archiwum ZIP, użyj polecenia cmdlet Rozwiń Archiwum.
Format polecenia:
Expand-Archive [-Path] String [-DestinationPath] String [-Force] [-Confirm]
Na przykład, aby rozpakować wcześniej utworzone archiwum zip, zastępując pliki w katalogu docelowym:
Rozwiń-Archiwum -Path C: \ Scripts \ test1.zip -DestinationPath c: \ scripts -Force
Z niedociągnięć modułu archiwizującego tej wersji warto zauważyć:
- Nie można wyświetlić zawartości archiwum bez rozpakowania
- Części plików nie można wyodrębnić z archiwum (tylko pełna dekompresja)
- Nie można używać innych formatów archiwów niż zip
W poprzednich wersjach Poweshell można używać klasy NET Framework 4.5 do kompresji / dekompresji plików zip Zipfile. Format używania tej klasy jest następujący.
Pakujemy pliki do archiwum:
Add-Type -Assembly „system.io.compression.filesystem”
$ src = „C: \ Logs”
$ dst = „C: \ Archive \ test.zip”
[io.compression.zipfile] :: CreateFromDirectory ($ src, $ dst)
Możesz rozpakować archiwum ZIP w następujący sposób:
Add-Type -Assembly „system.io.compression.filesystem”
$ src = "C: \ Archive \ test.zip"
$ dst = "C: \ Logs \ Archve"
[io.compression.zipfile] :: ExtractToDirectory ($ src, $ dst)