Respostas:
DotNetZip permitirá que você faça isso no PowerShell. Não é uma linha única, mas a biblioteca permitirá que você escreva o script do PowerShell necessário.
Você também pode usar a interface COM, consulte Compactar arquivos com o Windows PowerShell e empacotar um gadget da barra lateral do Windows Vista .
Pesquisar no Google "zip powershell" ou "descompactar powershell" também pode gerar resultados úteis.
É assim que você pode fazer isso puramente no Powershell sem nenhuma ferramenta externa. Isso descompacta um arquivo chamado test.zip no diretório de trabalho atual:
$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())
faz o descompactação 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()) }
Agora no .NET Framework 4.5, há uma classe ZipFile que você pode usar assim:
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
(Resolve-Path $someDir).Path
os argumentos.
Você pode conferir as PSCX (Extensões da Comunidade do PowerShell), que possuem cmdlets especificamente para isso.
Eu sei que essa é uma pergunta muito antiga, mas eu só a vi ligada no Twitter, imaginando que eu postaria uma resposta atual.
O PowerShell 5, atualmente disponível no Windows 10 ou através da Visualização de Produção do Windows Management Framework 5 , vem com dois cmdlets internos para 'compactar' e 'descompactar':
Eu acho a solução mais simples para usar apenas binários do infozip que usei há anos e uso em um ambiente 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.
Seria fácil colocar um invólucro do PowerShell em torno da saída de texto, mas na prática eu nunca preciso disso, então não me incomodei.
Também gosto do Info-ZIP (o mecanismo Zip encontrado na maioria dos outros utilitários Zip) e do 7-Zip , outro favorito que possui um utilitário Zip para GUI e linha de comando. O ponto é que existem alguns bons utilitários de linha de comando que funcionarão para a maioria das tarefas do PowerShell.
Existem alguns truques para executar utilitários de linha de comando que não foram criados com o PowerShell em mente:
A execução de um executável que começa com um número no nome, o antecede com um E comercial (&).
& 7zip.exe
Agrupe cada token, o utilitário espera ver na linha de comando, entre aspas.
& "c: \ caminho com espaço \ SomeCommand.exe" "/ parameter2" "/ parameter2" "Valor do parâmetro2" "Valor2` "com uma citação"
Tente o seguinte:
zip filename.zip (Get-ChildItem somepath\*)
Ou até:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell Gostei da sua resposta, mas a expandi um pouco
# 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())
}
A abordagem iônica é fundamental:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
suporta senhas, outros métodos de criptografia, etc.
Criei um módulo compatível com PowerShell 2.0 que usa os comandos nativos do sistema operacional Windows para compactar e descompactar arquivos de maneira síncrona. Isso funciona em sistemas operacionais mais antigos, como o Windows XP, e não requer o .Net 4.5 ou quaisquer outras ferramentas externas. As funções também bloquearão a execução do script até que todos os arquivos tenham sido compactados / descompactados. Você pode encontrar mais informações e o módulo no meu blog aqui .