2011-09-07 8 views
5

Desidero essere in grado di eseguire il remote remoto in un sistema e comprimere o decomprimere i file e ricevere il segnale di processo quando è completo. Il processo di avvio funziona con il parametro -wait per eseguire 7z.exe in modo sincrono da PowerShell. Quando provo a combinarlo con invoke-command per eseguire lo stesso comando da remoto, non onora il parametro wait e credo che stia uccidendo il processo poiché ritorna rapidamente e non produce mai un file zip.zippare in remoto i file con PowerShell start-process e invoke-command

[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 

ho inizialmente provato la PSCX write-zip & espandere-archivio, ma quest'ultimo non è compatibile con 64 bit di .NET 4.0 configurazione. Così ora sto provando a chiamare 64-bit 7z.exe tramite la riga di comando. Non sto ricevendo errori. PowerShell segnala il lavoro come stato di esecuzione, quindi completa e non viene prodotto alcun file zip.

Invoke-Command -ComputerName localhost -FilePath 'C:\Scripts\ZipIt.ps1' -ArgumentList 'd:\TestFolder','d:\promote\TestFile.7z' -AsJob 

Apprezzare qualsiasi aiuto o indicazioni.

Grazie, Gregory

risposta

5

Dal momento di avvio del processo sarà utilizzato in modo sincrono qui, mi sento di raccomandare di evitare e basta usare la 7z.exe eseguibile:

$sevenZip = "C:\Program Files\7-zip\7z.exe" 
&$sevenZip a $zipFileName $dirToZip 

In questo modo, naturalmente, bloccare lo script fino 7zip completa il suo lavoro.

+0

Grazie Efran. Ha funzionato! Ho incontrato un problema di memoria, ma l'ho risolto aumentando dal valore predefinito di 150 MB. winrm set winrm/config/winrs '@' {MaxMemoryPerShellMB = '" 255' "'} –

+0

Siete i benvenuti, @Che cosa! –

0

Utilizzare 7z.exe direttamente farebbe il trucco. Se si scopre che è necessario per decomprimere un file protetto da password è possibile utilizzare:

$sevenZip = "C:\Program Files\7-zip\7z.exe" 
&$sevenZip e -y "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName 
Problemi correlati