2011-09-07 100 views
5

我希望能夠遠程訪問系統並壓縮或解壓縮文件,並在完成時提供進程信號。啓動過程使用-wait參數從PowerShell同步運行7z.exe。當我嘗試將它與invoke-command結合起來以遠程運行相同的命令時,它不遵守wait參數,我相信它會殺死該進程,因爲它快速返回並且從不生成zip文件。使用PowerShell啓動進程和調用命令遠程壓縮文件

[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 

我原來試過PSCX寫拉鍊&擴大歸檔,但後者不能與64位.NET 4.0配置兼容。所以現在我試圖通過命令行調用64位7z.exe。我沒有收到任何錯誤。 PowerShell將作業報告爲運行狀態,然後完成,並且不生成zip文件。

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

欣賞任何幫助或指針。

感謝, 格雷戈裏

回答

5

自啓動過程中會同步在這裏使用的,我會建議避免它,只是使用7z.exe可執行文件:

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

這樣做自然會擋住你的腳本,直到7zip的完成它的工作。

+0

謝謝Efran。這工作!我遇到了一個內存問題,但通過增加150MB默認值來修復它。 winrm set winrm/config/winrs'@'{MaxMemoryPerShellMB ='「255'」'} –

+0

不客氣,@What! –

0

直接使用7z.exe可以解決問題。如果你發現你需要解壓一個密碼保護的文件,你可以使用:

$sevenZip = "C:\Program Files\7-zip\7z.exe" 
&$sevenZip e -y "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName 
相關問題