使用PowerShell start-process和invoke-command远程压缩文件

时间:2011-09-07 05:11:46

标签: powershell invoke-command start-process

我希望能够远程进入系统并在那里压缩或解压缩文件,并在完成后获得过程信号。启动过程使用-wait参数从PowerShell同步运行7z.exe。当我尝试将它与invoke-command结合起来远程运行相同的命令时,它不会遵守wait参数,我相信它会杀死进程,因为它快速返回并且永远不会生成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

我最初尝试过PSCX write-zip& expand-archive,但后者与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

感谢任何帮助或指示。

谢谢, 格雷戈里

2 个答案:

答案 0 :(得分:5)

由于Start-Process将在这里同步使用,我建议避免使用它,只使用7z.exe可执行文件:

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

这样做会自然会阻止你的脚本,直到7zip完成它的工作。

答案 1 :(得分:0)

直接使用7z.exe就可以了。如果您发现需要解压缩受密码保护的文件,则可以使用:

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