Câu trả lời:
DotNetZip sẽ cho phép bạn làm điều này từ PowerShell. Nó không phải là một lớp lót, nhưng thư viện sẽ cho phép bạn viết tập lệnh PowerShell mà bạn cần.
Bạn cũng có thể sử dụng giao diện COM, xem Nén tệp bằng Windows PowerShell sau đó đóng gói Tiện ích thanh bên Windows Vista .
Googling "zip powershell" hoặc "unzip powershell" cũng có thể tạo ra kết quả hữu ích.
Đây là cách bạn có thể làm điều đó hoàn toàn từ Powershell mà không cần bất kỳ công cụ bên ngoài nào. Điều này giải nén một tệp có tên test.zip vào thư mục làm việc hiện tại:
$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())
$destination.Copyhere($zip_file.items())
không giải nén thực tế.
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()) }
Bây giờ trong .NET Framework 4.5, có một lớp ZipFile mà bạn có thể sử dụng như thế này:
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
Bạn có thể muốn xem Phần mở rộng cộng đồng PowerShell (PSCX) có các lệnh ghép ngắn dành riêng cho việc này.
Tôi biết đây là một câu hỏi rất cũ, nhưng tôi chỉ thấy nó được liên kết trên Twitter trên hình tôi sẽ đăng một câu trả lời hiện tại.
PowerShell 5, hiện có sẵn trên Windows 10 hoặc thông qua Bản xem trước sản xuất Windows Management Framework 5 , đi kèm với hai lệnh ghép ngắn tích hợp để 'nén' và 'giải nén':
Tôi tìm thấy giải pháp đơn giản nhất để chỉ sử dụng các tệp nhị phân thông tin mà tôi đã sử dụng trong nhiều năm và sử dụng trong môi trường 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.
Sẽ rất khó khăn để đặt một trình bao bọc quyền hạn xung quanh đầu ra văn bản nhưng trong thực tế tôi không bao giờ cần điều đó vì vậy tôi không bận tâm.
Tôi cũng thích Info-ZIP (công cụ Zip được tìm thấy trong hầu hết các tiện ích Zip khác) và 7-Zip , một ứng dụng yêu thích khác có cả GUI và tiện ích Zip dòng lệnh. Vấn đề là, có một số tiện ích dòng lệnh tốt sẽ hoạt động cho hầu hết các tác vụ PowerShell.
Có một số thủ thuật để chạy các tiện ích dòng lệnh chưa được xây dựng với PowerShell:
Chạy một tệp thực thi bắt đầu bằng một số trong tên, mở đầu nó bằng Ampersand (&).
& 7zip.exe
Gói từng mã thông báo, tiện ích dự kiến sẽ nhìn thấy từ dòng lệnh, trong dấu ngoặc kép.
& "c: \ path với dấu cách
Thử đi:
zip filename.zip (Get-ChildItem somepath\*)
Hoặc thậm chí:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell Tôi thích câu trả lời của bạn nhưng tôi đã mở rộng nó ra một chút
# 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())
}
Cách tiếp cận ion đá:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
hỗ trợ mật khẩu, các phương thức mật mã khác, v.v.
Tôi đã tạo một mô-đun tương thích PowerShell 2.0 sử dụng các lệnh hệ điều hành Windows gốc để nén và giải nén các tệp một cách đồng bộ. Điều này hoạt động trên các HĐH cũ hơn, như Windows XP và không yêu cầu .Net 4.5 hoặc bất kỳ công cụ bên ngoài nào khác. Các chức năng cũng sẽ chặn thực thi tập lệnh cho đến khi tất cả các tệp được nén / giải nén. Bạn có thể tìm thêm thông tin và mô-đun trên blog của tôi ở đây .