Descompacte o arquivo com o Powershell no Server 2012 Core

15

Eu preciso descompactar um arquivo com o powershell. A maneira típica que vi todo mundo fazer isso é automatizar o shell com um script.

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

Isso não vai funcionar para mim, já que o Server Core não tem um shell, então não há um para automatizar. Isto dá um erro E_FAIL COM.

O Powershell não parece ser capaz de fazer isso sozinho, e se eu for terceiro, eu tenho que descobrir uma maneira de fazer o script para colocar o utilitário no servidor em primeiro lugar. O 7-Zip foi meu favorito, mas não parece que eu possa fazer o script do download e da instalação dele. O Sourceforge continua me devolvendo arquivos HTML.

Como posso script completamente descompactar um arquivo zip no Server 2012 Core?

    
por vcsjones 08.11.2012 / 21:30

1 resposta

23

O Server 2012 vem com o Dot.NET 4.5 que tem System.IO.Compression .ZipFile que possui um método ExtractToDirectory. Você deve poder usar isso no PowerShell.

Aqui está um exemplo.

Primeiro você precisa carregar o assembly em que o ZipFile está:

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

Em seguida, extraia o conteúdo

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

Editar: se você atualizou para o PowerShell 5 (Windows Management Framework 5.0), você finalmente terá cmdlets nativos:

Expand-Archive $pathToZip $targetDir
    
por 09.11.2012 / 14:04