El artículo vinculado +1 tiene tareas útiles, a diferencia de la respuesta más votada
Ruben Bartelink,
55
-1 por sugerir una búsqueda en Google. Este es el principal resultado de StackExchange en una búsqueda en Google de "descomprimir powershell"
máquina que anhela el
154
Así es como puedes hacerlo solo desde Powershell sin herramientas externas. Esto descomprime un archivo llamado test.zip en el directorio de trabajo actual:
use $ destination.Copyhere ($ zip_file.items (), 0x10) para sobrescribir los archivos existentes. 0x4 oculta el cuadro de diálogo y 0x14 combina estos y sobrescribe y oculta el cuadro de diálogo.
Peter
3
La línea $destination.Copyhere($zip_file.items())hace el descompresión real.
Jonathan Allen
2
Puede convertir lo anterior en una función, si lo desea: function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
James Holwell el
66
Esta debería ser la respuesta aceptada.
tugberk
2
Esto me falla cuando el archivo zip contiene solo una carpeta (los elementos están vacíos)
James Woolfenden
56
Ahora en .NET Framework 4.5, hay una clase ZipFile que puede usar así:
Esto sería genial si hubiera un método simple para ExtractToDirectory y una opción para sobrescribir todos los archivos existentes.
James Dunne
1
Esto funciona con .NET 4.5. Sin embargo, también necesita Powershell V3.
DalSoft
3
Cargue el ensamblaje con Add-Type, por ejemplo: Add-Type -AssemblyName System.IO.Compression.FileSystem
Mike
2
@JamesDunne: si no tiene otros archivos que necesita preservar, podría usar 'Remove-Item -Recurse $ TargetFolder'. De lo contrario, se puede hacer lo que quiere, pero no sería trivial. Debería abrir el archivo zip para leerlo, y luego recorrerlo, eliminar cualquier objeto de destino anterior y desempaquetar el nuevo. Por suerte para mí, la solución fácil funciona. ;)
Mike
3
Tenga en cuenta que las ubicaciones de archivos relativas utilizarán el directorio actual de .NET , no el de PowerShell. Ver aquí . Probablemente sea mejor solo con (Resolve-Path $someDir).Pathlos argumentos.
+1 PSCX es un gran conjunto de cmdlets complementarios: solo desearía poder elegir y elegir más cuáles quiero y cuáles no. Parece estar cambiando mucho en mi ejemplo Powershell ....
marc_s
Me he encontrado con esto porque realmente quiero automatizar la instalación de PSCX si puedo para algunos compañeros de trabajo. Intentándolo ahora para ver qué tipo de problemas me encuentro
jcolebrand
16
Sé que esta es una pregunta muy antigua, pero acabo de verla vinculada en Twitter y pensé que publicaría una respuesta actual.
Es bueno proporcionar nueva información a viejas preguntas. ;) +1
jpmc26
5
Encuentro la solución más simple para usar solo los binarios de infozip que he usado durante años y usar en un entorno UNIX.
PS> zip -9r../test.zip *
PS> cd ..
PS> unzip -t test.zip Archive: test.zip
testing:LinqRepository/ OK
testing:LinqRepository/ApplicationService.cs OK
testing:LinqRepository/bin/ OK
...No errors detected in compressed data of test.zip.
Sería sencillo colocar un envoltorio de PowerShell alrededor de la salida de texto, pero en la práctica nunca lo necesito, así que no me he molestado.
También me gusta Info-ZIP (el motor Zip que se encuentra en la mayoría de las otras utilidades Zip) y 7-Zip , otro favorito que tiene una utilidad Zip GUI y de línea de comando. El punto es que hay algunas buenas utilidades de línea de comandos que funcionarán para la mayoría de las tareas de PowerShell.
Existen algunos trucos para ejecutar utilidades de línea de comandos que no se crearon teniendo en cuenta PowerShell:
Ejecutando un ejecutable que comienza con un número en el nombre, prefacio con un Ampersand (&).
& 7zip.exe
Envuelva cada token, la utilidad espera ver desde la línea de comandos, entre comillas.
& "c: \ ruta con espacio \ SomeCommand.exe" "/ parámetro2" "/ parámetro2" "Valor del parámetro2" "Valor2` "con una comilla"
Creé un módulo compatible con PowerShell 2.0 que utiliza los comandos nativos del sistema operativo Windows para comprimir y descomprimir archivos de forma síncrona. Esto funciona en sistemas operativos más antiguos, como Windows XP, y no requiere .Net 4.5 ni ninguna otra herramienta externa. Las funciones también bloquearán la ejecución del script hasta que todos los archivos hayan sido comprimidos / descomprimidos. Puede encontrar más información y el módulo en mi blog aquí .
Respuestas:
DotNetZip le permitirá hacer esto desde PowerShell. No es una línea, pero la biblioteca le permitirá escribir el script de PowerShell que necesita.
También puede usar la interfaz COM, consulte Comprimir archivos con Windows PowerShell y luego empaquetar un gadget de barra lateral de Windows Vista .
Buscar en Google "zip powershell" o "descomprimir powershell" también podría arrojar resultados útiles.
fuente
Así es como puedes hacerlo solo desde Powershell sin herramientas externas. Esto descomprime un archivo llamado test.zip en el directorio de trabajo actual:
fuente
$destination.Copyhere($zip_file.items())
hace el descompresión real.function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
Ahora en .NET Framework 4.5, hay una clase ZipFile que puede usar así:
fuente
(Resolve-Path $someDir).Path
los argumentos.Es posible que desee consultar The PowerShell Community Extensions (PSCX), que tiene cmdlets específicamente para esto.
fuente
Sé que esta es una pregunta muy antigua, pero acabo de verla vinculada en Twitter y pensé que publicaría una respuesta actual.
PowerShell 5, actualmente disponible en Windows 10 o a través de Windows Management Framework 5 Production Preview , viene con dos cmdlets integrados para 'comprimir' y 'descomprimir':
fuente
Encuentro la solución más simple para usar solo los binarios de infozip que he usado durante años y usar en un entorno UNIX.
Sería sencillo colocar un envoltorio de PowerShell alrededor de la salida de texto, pero en la práctica nunca lo necesito, así que no me he molestado.
http://www.info-zip.org/
fuente
También me gusta Info-ZIP (el motor Zip que se encuentra en la mayoría de las otras utilidades Zip) y 7-Zip , otro favorito que tiene una utilidad Zip GUI y de línea de comando. El punto es que hay algunas buenas utilidades de línea de comandos que funcionarán para la mayoría de las tareas de PowerShell.
Existen algunos trucos para ejecutar utilidades de línea de comandos que no se crearon teniendo en cuenta PowerShell:
Ejecutando un ejecutable que comienza con un número en el nombre, prefacio con un Ampersand (&).
& 7zip.exe
Envuelva cada token, la utilidad espera ver desde la línea de comandos, entre comillas.
& "c: \ ruta con espacio \ SomeCommand.exe" "/ parámetro2" "/ parámetro2" "Valor del parámetro2" "Valor2` "con una comilla"
Prueba esto:
O incluso:
fuente
James Holwell Me gusta tu respuesta pero la amplié un poco
fuente
WinRAR puede funcionar en modo CMD aceptando argumentos
fuente
El enfoque iónico oscila:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
admite contraseñas, otros métodos de cifrado, etc.
fuente
Creé un módulo compatible con PowerShell 2.0 que utiliza los comandos nativos del sistema operativo Windows para comprimir y descomprimir archivos de forma síncrona. Esto funciona en sistemas operativos más antiguos, como Windows XP, y no requiere .Net 4.5 ni ninguna otra herramienta externa. Las funciones también bloquearán la ejecución del script hasta que todos los archivos hayan sido comprimidos / descomprimidos. Puede encontrar más información y el módulo en mi blog aquí .
fuente