como extrair arquivos zip usando o PowerShell

O Windows inclui a capacidade de descompactar arquivos e até mesmo expõe esta funcionalidade através de programação via COM. Aqui está como fazê-lo.

Vimos esta pergunta pediu inúmeras vezes no estouro de pilha e fóruns iguais, mas a maior parte do tempo as pessoas recomendamos usar as extensões comunitárias PowerShell ou um aplicativo de linha de comando legado. Verdade seja dita, não é realmente tão difícil de fazer em PowerShell.

$ Shell = new-object -com Shell.Application; $ zip = $ shell.NameSpace ( “C: \site.zip”); foreach ($ item $ zip.items ()); $ shell.Namespace ( “C : \ temp \ “) CopyHere ($ item).

Hardcoding valores não é realmente ideal, então vamos fazê-lo em uma função rápida.

função Expandir-ZipFile ($ file, $ destino); $ shell = new-object -com Shell.Application; $ zip = $ shell.NameSpace ($ file); foreach ($ item $ zip.items ()); $ shell.Namespace ($ destino) .copyhere ($ item)

Então, podemos simplesmente usar a função como esta

Expandir-ZipFile -File “C: \site.zip” -Destination “C: \ temp \”

Lembre-se de adicioná-lo ao seu perfil do Windows PowerShell, de modo que você não precisa de bibliotecas de terceiros para a funcionalidade que já está incluído fora da caixa.

Em vez de augurando sobre o Windows 8, talvez isso seria uma melhor utilização do seu tempo.)

Clique no link acima.

Eu acho que ainda vai preferir 7-Zip sobre PowerShell para isso. É bom saber que a capacidade é built-in para o sistema operacional embora.

@raphoenix Qualquer um pode encontrar livros sobre o assunto. O truque é encontrar um bom, atual. Você possui algum desses livros ou você recomendar um ou dois sobre os outros?

@Iszi Concordo que eu não iria usar o exemplo, por si só, em vez de 7-Zip, mas se você está indo fazer algo mais para os arquivos descompactados em um script PowerShell maior, o trecho de código vai ser realmente útil.

@Netpilot

PowerShell é tal importante programa incluído no Windows 7 e 8, eu sinto que é extremamente importante para aprender o programa.

Sim eu possuo livros PowerShell.

Recomendar os livros de 5 estrelas no link Amazon postado acima.

Pode ser que deve ter um tópico chamado “O que você está lendo este Verão?”.

Esta capacidade de descompactação PowerShell é reforçada pelo segundo parâmetro opcional para a função CopyHere.

Eu uso vOption = 16 em meus scripts. (Sim para todos os prompts)

Então, agora que eu aquecido para PowerShell, mais recentemente, na verdade eu acabei usando este bit no outro dia para falar um Admin Server para fora da instalação de 7-Zip em um sistema que precisava de um utilitário de linha de comando para extrair um arquivo ZIP em um trabalho em lotes.

(Tenho zero objeções a 7-Zip pessoalmente – na verdade, eu disse a minha preferência por ele anteriormente neste segmento -. Mas profissionalmente, parte do meu trabalho é garantir que os sistemas de aderir ao princípio de menor funcionalidade de segurança que é, essencialmente, você deve evitar a instalação de software adicional sempre que possível.)

Uma limitação eu encontrei é que o comando não parece ser capaz de lidar com arquivos ZIP que têm uma estrutura de pasta interno. Felizmente, isso não foi um problema para este caso de uso particular.

Espero que isso não é etiqueta imprópria para reviver este tema de idade. Eu queria manter a continuidade da discussão como um dos comentários está me dando bolas de pêlo. Eu criei a função por exemplo, e ele funciona muito bem. Infelizmente, por projetar o sistema que cria os arquivos zip inclui nomes de arquivos duplicados para alguns dos arquivos dentro do arquivo zip. Antes de script é simples selecione ‘copiar e mudar o nome | repita para todos os outros. Isso seria opção folder.copy 8: “(8). Dê o arquivo que está sendo operado em um novo nome em um mover, copiar ou mudar o nome operação se um arquivo com o nome de destino já existe” Quando insiro 8 ou 16 ( sim a todas as perguntas) Eu tenho algumas coisas surpreendentes aparecem no meu diretório de teste. Como cópias de atalhos, usado recentemente arquivos.

Vou postar meus códigos, e espero que alguém pode apontar o erro de minhas maneiras: Function para descompactar filesRef. http://msdn.microsoft.com/en-us/library/windows/desktop/bb787866%28v=vs.85%29.aspx

função descompactador ($ file, $ destino) {$ shell = -com Shell.Application $ zip = $ shell.NameSpace ($ file) foreach new-object ($ item $ zip.items ()) {$ shell.Namespace ( $ destino) .copyhere ($ item)}}

Então eu chamá-lo com

Unzipper -File $ caseDrive \ $ caseName.zip -Destination $ caseDrive

e que funciona perfeito, exceto meus arquivos duplicados são ignoradas e desaparecer.

Próximo Nesta linha: foreach ($ item $ zip.items ()) I acrescentou: foreach ($ item $ zip.items (), 8) e que, quando ocorrem as bolas de pêlo.

Eu estou querendo saber se eu preciso adicionar 4096 para o valor com base em: http://msdn.microsoft.com/en-us/library/windows/desktop/bb787866%28v=vs.85%29.aspx

Então eu tentei com 4102 e desta vez eu tenho a pasta ‘Favoritos’ no meio da minha extraction.Also o “Copiar e Substituir?” Pop-up aparece. Então eu adicionei um 8 (4110) Nenhuma mudança exceto em vez de Favoritos, Eu tenho “Meus vídeos” folder.I adicionado 4 (4114) e não obter o prompt para copiar? mas ainda temos a barra de progresso, unexpectedly.I estou querendo saber se esse link acima, sendo referência javascript, talvez usa valores diferentes do PowerShell.

Se alguém tiver uma idéia, eu ficaria muito satisfeito por os help.Thanks!

A Copa Stanley, o famoso troféu de hóquei, é nomeado após Lord Stanley of Preston, que, quando era Governador Geral do Canadá, era um fã de hóquei conhecido e defensor do esporte.