Unzip File Dengan Powershell di Server 2012 Core

15

Saya perlu membuka zip file dengan PowerShell. Cara khas yang saya lihat semua orang lakukan ini adalah dengan mengotomatiskan shell dengan skrip.

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

Ini tidak akan bekerja untuk saya, karena Server Core tidak memiliki shell, jadi tidak ada yang mengotomatisasi. Ini menghasilkan kesalahan E_FAIL COM.

Powershell tampaknya tidak dapat melakukannya sendiri, dan jika saya pergi ke pihak ke-3, saya harus mencari cara untuk skrip mendapatkan utilitas ke server di tempat pertama. 7-Zip adalah tujuan saya, tetapi sepertinya saya tidak bisa skrip unduhan dan instal. Sourceforge terus meludahkan saya kembali file HTML.

Bagaimana saya bisa benar-benar skrip membuka ritsleting file zip di Server 2012 Core?

vcsjones
sumber
Ada apa dengan persyaratan untuk mengunduh 7zip dari SF? Anda tidak dapat menginstal / menyalin dari sumber internal?
longneck
@longneck Script PS yang saya produksi akan dibagikan kepada pelanggan; jadi skrip harus sepenuhnya mandiri. Saya bisa meng-host utilitas zip sendiri, tapi itu sakit kepala lain yang tidak saya inginkan (legalese). Saya hanya berharap ada Cmdlet sederhana yang bisa melakukan ini yang
diperkenalkan
Jika Anda memberikan sesuatu kepada pelanggan mengapa tidak membangun arsip self-extracting?
Zoredache
@Zoredache Ya, sepertinya lebih banyak pekerjaan pada awalnya (sistem build kami sudah membangun ZIP), saya berharap itu hanya akan "sangat cepat".
vcsjones

Jawaban:

24

Server 2012 hadir dengan Dot.NET 4.5 yang memiliki System.IO.Compression.ZipFile yang memiliki metode ExtractToDirectory. Anda harus dapat menggunakan ini dari PowerShell.

Berikut ini sebuah contoh.

Pertama, Anda perlu memuat perakitan ZipFile di:

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

Kemudian ekstrak isinya

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

Sunting: Jika Anda telah memperbarui ke PowerShell 5 (Windows Management Framework 5.0) Anda akhirnya memiliki cmdlet asli:

Expand-Archive $pathToZip $targetDir
Peter Hahndorf
sumber
Saya hanya melihat melalui System.IO.Compression dan ZipFile tidak ada di sana. Apakah ada pembaruan ke 4,5 yang menambahkannya?
Mike
Tampaknya ini diperkenalkan pada 4,5, tetapi tidak hadir dalam 4,0. Jika Anda memiliki 4,5, Anda harus memilikinya.
Peter Hahndorf
6
Sudah waktunya sialan bahwa ada solusi asli untuk ini.
MDMarra