Decomprimi file con Powershell in Server 2012 Core


15

Devo decomprimere un file con PowerShell. Il modo tipico in cui ho visto tutti farlo è automatizzare la shell con uno script.

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

Questo non funzionerà per me, poiché Server Core non ha una shell, quindi non ce n'è uno da automatizzare. Questo dà un errore COM E_FAIL.

Powershell non sembra essere in grado di farlo da solo, e se vado da terze parti, devo trovare un modo per script per ottenere l'utilità sul server in primo luogo. 7-Zip è stato il mio punto di partenza, ma non mi sembra di poter scrivere il download e installarlo. Sourceforge continua a sputarmi indietro file HTML.

Come posso script completamente decomprimere un file zip in Server 2012 Core?


Qual è il requisito per scaricare 7zip da SF? Perché non puoi installare / copiare da una fonte interna?
collo lungo

@longneck Lo script PS che sto producendo verrà distribuito ai clienti; quindi la sceneggiatura deve essere interamente autonoma. Ho potuto ospitare un programma di utilità zip noi stessi, ma questa è un'altra mal di testa che non voglio (legalese). Speravo solo che ci fosse un semplice Cmdlet in grado di fare ciò che è stato introdotto nel 2012.
vcsjones

Se stai distribuendo qualcosa ai clienti perché non creare un archivio autoestraente?
Zoredache,

@Zoredache Beh, inizialmente sembrava che ci fosse più lavoro (il nostro sistema di compilazione sta già costruendo ZIP), speravo che sarebbe stato "molto veloce".
vcsjones,

Risposte:


24

Server 2012 viene fornito con Dot.NET 4.5 che ha System.IO.Compression.ZipFile che ha un metodo ExtractToDirectory. Dovresti essere in grado di usarlo da PowerShell.

Ecco un esempio

Innanzitutto è necessario caricare l'assembly ZipFile in:

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

Quindi estrarre il contenuto

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

Modifica: se hai aggiornato a PowerShell 5 (Windows Management Framework 5.0) hai finalmente i cmdlet nativi:

Expand-Archive $pathToZip $targetDir

Ho appena cercato System.IO.Compression e ZipFile non c'è. C'è un aggiornamento a 4.5 che lo aggiunge?
Mike,

Sembra che questo sia stato introdotto in 4.5, ma non presente in 4.0. Se hai 4.5 dovresti averlo.
Peter Hahndorf,

6
È quasi ora che ci sia una soluzione nativa per questo.
MDMarra,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.