我希望能够远程进入系统并在那里压缩或解压缩文件,并在完成后获得过程信号。启动过程使用-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
感谢任何帮助或指示。
谢谢, 格雷戈里
答案 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