Giải nén tệp với Powershell trong Server 2012 Core


15

Tôi cần giải nén một tập tin với powershell. Cách điển hình mà tôi thấy mọi người làm điều này là tự động hóa trình bao với một tập lệnh.

$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
$destinationFolder = $shellApplication.NameSpace($destination)
$destinationFolder.CopyHere($zipPackage.Items())

Điều này sẽ không hiệu quả với tôi, vì Server Core không có vỏ, vì vậy không có cái nào để tự động hóa. Điều này đưa ra lỗi COM E_FAIL.

Powershell dường như không thể tự làm điều đó và nếu tôi đến bên thứ 3, tôi phải tìm ra cách để kịch bản đưa tiện ích vào máy chủ ngay từ đầu. 7-Zip là mục đích của tôi, nhưng dường như tôi không thể kịch bản tải xuống và cài đặt nó. Sourceforge tiếp tục gửi lại cho tôi các tệp HTML.

Làm cách nào tôi có thể hoàn toàn kịch bản giải nén tệp zip trong Server 2012 Core?


Yêu cầu gì để tải xuống 7zip từ SF? Bạn không thể cài đặt / sao chép từ một nguồn nội bộ?
longneck

@longneck Kịch bản PS tôi đang sản xuất sẽ được trao cho khách hàng; vì vậy kịch bản phải hoàn toàn khép kín. Tôi có thể tự lưu trữ một tiện ích zip, nhưng đó là một vấn đề đau đầu khác mà tôi không muốn (hợp pháp). Tôi chỉ hy vọng có một Cmdlet đơn giản có thể thực hiện điều này đã được giới thiệu vào năm 2012.
vcsjones

Nếu bạn đang giao một cái gì đó cho khách hàng tại sao không xây dựng một kho lưu trữ tự giải nén?
Zoredache

@Zoredache Chà, ban đầu có vẻ như nhiều công việc hơn (hệ thống xây dựng của chúng tôi đã xây dựng ZIP), tôi đã hy vọng nó sẽ "thực sự nhanh chóng".
vcsjones

Câu trả lời:


24

Server 2012 đi kèm với Dot.NET 4.5 có System.IO.Compression.ZipFile có phương thức ExtractToDirectory. Bạn sẽ có thể sử dụng điều này từ PowerShell.

Đây là một ví dụ.

Trước tiên, bạn cần tải ZipFile lắp ráp trong:

[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null

Sau đó trích xuất nội dung

[System.IO.Compression.ZipFile]::ExtractToDirectory($pathToZip, $targetDir)

Chỉnh sửa: Nếu bạn đã cập nhật lên PowerShell 5 (Windows Management Framework 5.0), cuối cùng bạn cũng có các lệnh ghép ngắn gốc:

Expand-Archive $pathToZip $targetDir

Tôi chỉ xem qua System.IO.Compression và ZipFile không có ở đó. Có bản cập nhật lên 4.5 có thêm nó không?
Mike

Có vẻ như điều này đã được giới thiệu trong 4.5, nhưng không có trong 4.0. Nếu bạn có 4,5 bạn nên có nó.
Peter Hahndorf

6
Đó là khoảng thời gian chết tiệt mà có một giải pháp bản địa cho việc này.
MDMarra

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.