Descomprima el archivo con Powershell en Server 2012 Core


15

Necesito descomprimir un archivo con powershell. La forma típica en que he visto a todos hacer esto es automatizando el shell con un script.

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

Esto no va a funcionar para mí, ya que Server Core no tiene un shell, por lo que no hay uno para automatizar. Esto da un error COM E_FAIL.

Powershell no parece poder hacerlo por sí solo, y si voy a una tercera parte, tengo que encontrar una forma de script para que la utilidad llegue al servidor en primer lugar. 7-Zip fue mi opción, pero no parece que pueda hacer un script para descargarlo e instalarlo. Sourceforge sigue escupiéndome archivos HTML.

¿Cómo puedo script completamente descomprimir un archivo zip en Server 2012 Core?


¿Qué pasa con el requisito de descargar 7zip desde SF? ¿Wy no puede instalar / copiar desde una fuente interna?
Longneck

@longneck El script de PS que estoy produciendo se entregará a los clientes; entonces el guión tiene que ser completamente autónomo. Yo podía anfitrión de una utilidad de compresión de nosotros mismos, pero eso es otro dolor de cabeza que no quiero (jerga legal). Solo esperaba que hubiera un Cmdlet simple que pudiera hacer esto que se
introdujo

Si está entregando algo a los clientes, ¿por qué no construir un archivo autoextraíble?
Zoredache el

@Zoredache Bueno, eso parecía más trabajo inicialmente (nuestro sistema de construcción ya está construyendo ZIP), esperaba que fuera "muy rápido".
vcsjones

Respuestas:


24

Server 2012 viene con Dot.NET 4.5 que tiene System.IO.Compression.ZipFile que tiene un método ExtractToDirectory. Debería poder usar esto desde PowerShell.

Aquí hay un ejemplo.

Primero debe cargar el ensamblaje en el que se encuentra ZipFile:

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

Luego extrae el contenido

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

Editar: si ha actualizado a PowerShell 5 (Windows Management Framework 5.0), finalmente tiene cmdlets nativos:

Expand-Archive $pathToZip $targetDir

Acabo de mirar System.IO.Compression y ZipFile no está allí. ¿Hay una actualización a 4.5 que lo agrega?
Mike

Parece que esto se introdujo en 4.5, pero no está presente en 4.0. Si tienes 4.5 deberías tenerlo.
Peter Hahndorf

66
Ya es hora de que haya una solución nativa para esto.
MDMarra

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.