Eu preciso descompactar um arquivo com o PowerShell. A maneira típica que eu vi todos fazerem isso é automatizando 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, pois o Server Core não possui um shell, portanto não há um para automatizar. Isso gera um erro E_FAIL COM.
O Powershell não parece capaz de fazê-lo por conta própria e, se eu for de terceiros, tenho que descobrir uma maneira de fazer o script, colocando o utilitário no servidor em primeiro lugar. O 7-Zip foi o meu favorito, mas não parece que eu possa criar um script para o download e a instalação dele. O Sourceforge continua me cuspindo de volta em arquivos HTML.
Como posso script completamente descompactando um arquivo zip no Server 2012 Core?
Respostas:
O Server 2012 vem com o Dot.NET 4.5, que possui 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 a montagem ZipFile:
Depois extraia o conteúdo
Editar: se você atualizou para o PowerShell 5 (Windows Management Framework 5.0), finalmente possui os cmdlets nativos:
fonte