如何通过PowerShell远程控制使7za.exe运行?

12

我尝试了多种不同的方法,但它们都导致相同的错误。这里是一组命令:

$s = New-PSsession -ComputerName ServerA
$job = Invoke-Command -Session $s -Scriptblock { Start-Process -FilePath    
    "C:\Scripts\ArchiveEventLogs\ver4.5\7za.exe" -ArgumentList "a", 
    "C:\Scripts\Eventlogs.bak\ServerA-20101111.7z", "C:\Scripts\Eventlogs.bak\*.evt*", 
     "-mx7", "-oC:\Scripts\Eventlogs.bak", "-wC:\Scripts\Eventlogs.bak", "-t7z" -Wait }  
     -AsJob

Get-Job | Wait-Job
Receive-Job Job$

我得到的输出是这样的:
7-Zip (A) 9.17 beta  Copyright (c) 1999-2010 Igor Pavlov  2010-10-04
Scanning

Creating archive C:\Scripts\Eventlogs.bak\ServerA-20101111.7z

ERROR: Can't allocate required memory!

我该如何解决这个错误???

值得注意的是,如果我在ServerA上直接运行Scriptblock而不使用远程操作,它是可以工作的。 感谢任何帮助!

2个回答

9

默认情况下,远程 shell 仅限于 150 MB 的内存。您可以使用服务器上的 winrm 命令行实用程序进行调整;我不确定 powershell wsman:\ 驱动器是否会让您交互式更改此设置,因为我认为它是 winrm 中 shell 插件功能的一般属性,而不是直接连接到 powershell。

C:\Windows\system32>winrm get winrm/config/winrs
Winrs
    AllowRemoteShellAccess = true
    IdleTimeout = 180000
    MaxConcurrentUsers = 5
    MaxShellRunTime = 2147483647
    MaxProcessesPerShell = 15
    **MaxMemoryPerShellMB = 150**
    MaxShellsPerUser = 5

压缩大文件是一项需要消耗大量内存的过程。

2
非常感谢。我已更新我的GPO以反映更高的内存分配,并且它起作用了!如果有人需要的话,GPO位置是:计算机配置-->策略-->管理模板-->Windows组件--> Windows远程Shell--> 指定每个Shell的最大内存(以MB为单位)。非常感谢! - Sean

7

另一种解决方案是更改Windows远程Shell的配置。

您可以在远程服务器上的PowerShell提示符中执行以下操作:

Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048

如果您不想通过组策略应用更改,这将非常有用。

附注:要查看当前配置的值,请尝试执行以下操作:

Get-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB

谢谢提供这个替代方案,比折腾GPO简单多了。 - sonjz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接