5

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

感谢任何帮助或指示。

谢谢,格雷戈里

4

2 回答 2

5

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

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

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

于 2011-09-07T05:26:26.513 回答
0

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

$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip e -y  "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName 
于 2016-03-29T17:14:57.660 回答