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.
Así es como puedes hacerlo solo desde Powershell sin herramientas externas. Esto descomprime un archivo llamado test.zip en el directorio de trabajo actual:
$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())
$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í:
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
Es posible que desee consultar The PowerShell Community Extensions (PSCX), que tiene cmdlets específicamente para esto.
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':
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"
Prueba esto:
zip filename.zip (Get-ChildItem somepath\*)
O incluso:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell Me gusta tu respuesta pero la amplié un poco
# Example
#unzip "myZip.zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
$shell = new-object -com shell.application
if (!(Test-Path "$sourcePath\$fileName"))
{
throw "$sourcePath\$fileName does not exist"
}
New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
$shell.namespace($destinationPath).copyhere($shell.namespace("$sourcePath\$fileName").items())
}
El enfoque iónico oscila:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
admite contraseñas, otros métodos de cifrado, etc.
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í .