使用PowerShell启动进程和调用命令远程压缩文件

使用PowerShell启动进程和调用命令远程压缩文件,powershell,invoke-command,start-process,Powershell,Invoke Command,Start Process,我想能够远程进入一个系统,压缩或解压文件,并有过程信号时,它是完整的。启动进程使用-wait参数从PowerShell同步运行7z.exe。当我尝试将它与invoke命令结合起来远程运行同一个命令时,它不支持wait参数,而且我认为它正在终止进程,因为它返回得很快,而且从不生成zip文件 [string]$sevenZip = "C:\Program Files\7-zip\7z.exe" [Array]$arguments = "a", $zipFilename, $dirToZip; "S

我想能够远程进入一个系统,压缩或解压文件,并有过程信号时,它是完整的。启动进程使用-wait参数从PowerShell同步运行7z.exe。当我尝试将它与invoke命令结合起来远程运行同一个命令时,它不支持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归档,但后者与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
感谢您的帮助或指点

谢谢,
Gregory

由于启动过程将在此处同步使用,我建议避免使用它,只需使用
7z.exe
可执行文件:

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

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

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

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

谢谢你,埃夫兰。成功了!我确实遇到了内存问题,但通过从默认的150MB增加内存来修复它。winrm设置winrm/config/winrs
@
{MaxMemoryPerShellMB=
“255
”`}