Remotamente zipar arquivos com PowerShell iniciar processo e Invoke-Command
-
27-10-2019 - |
Pergunta
Eu quero ser capaz de controle remoto em um sistema e zip ou descompactar arquivos lá e ter o sinal de processo quando ele é completo. obras Start-processo com o parâmetro -wait para executar 7z.exe síncrona de PowerShell. Quando tento combinar isso com Invoke-Command para executar o mesmo comando remotamente, ele não honrar o parâmetro de espera e eu acredito que é matar o processo, uma vez que retorna rapidamente e nunca produz um arquivo zip.
[string]$sevenZip = "C:\Program Files\7-zip\7z.exe"
[Array]$arguments = "a", $zipFilename, $dirToZip;
"Starting $sevenZip with $arguments"
Start-Process $sevenZip "$arguments" -Wait
#blocks and waits for zip file to complete
Inicialmente eu tentei o PSCX write-zip e expandir-archive, mas o último não é compatível com a configuração do .NET 4.0 de 64 bits. Então agora eu estou tentando chamar 7z.exe 64 bits através da linha de comando. Não recebo nenhum erro. PowerShell relata o trabalho como executar Estado e, em seguida, completa, e nenhum arquivo zip é produzido.
Invoke-Command -ComputerName localhost -FilePath 'C:\Scripts\ZipIt.ps1' -ArgumentList 'd:\TestFolder','d:\promote\TestFile.7z' -AsJob
aprecio qualquer ajuda ou ponteiros.
Obrigado, Gregory
Solução
Desde Iniciar-Process será usado de forma síncrona aqui, eu recomendaria evitar isso e usar apenas o executável 7z.exe
:
$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip a $zipFileName $dirToZip
Se o fizer, irá naturalmente bloquear o seu script até 7zip completa o seu trabalho.
Outras dicas
Usando 7z.exe diretamente faria o truque. Se você achar que você precisa unzip um arquivo protegido por senha que você poderia usar:
$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip e -y "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName