【问题标题】:OutOfMemory Exception on remote execution using Powershell Invoke-Command使用 Powershell Invoke-Command 远程执行时出现 OutOfMemory 异常
【发布时间】:2012-03-28 18:55:11
【问题描述】:

我正在尝试使用调用命令在远程计算机上执行 exe。使用远程桌面登录机器后在远程机器上执行exe会占用1GB内存,一分钟后执行完成。而当我在同一台机器上使用 Invoke-Command 执行相同的 exe 时,该进程返回 OutOfMemoryException 并突然结束。我的调用命令就像Invoke-Command -Session $someSessionVariable -ScriptBlock {Invoke-Expression "abc.exe --arg arg"} -AsJob 一样简单。

我是否遗漏了有关远程调用限制的内容?

提前致谢。

【问题讨论】:

  • 为什么还要使用iex 来调用本机程序? PowerShell 是一个 shell。执行命令就是它的作用。
  • @Joey - 虽然这是真的,但 powershell 在将参数传递给外部程序时存在很多问题,有时使用 iex 会更容易
  • 但是iex 只是所有问题之上的一层,至少我是如何理解的。您只需添加一个间接层,而根本解决不了任何问题。
  • 谢谢大卫,这个建议有帮助。

标签: powershell invoke-command remote-execution


【解决方案1】:

发件人:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384372(v=vs.85).aspx

远程 shell 的默认内存限制为 150MB

MaxMemoryPerShellMB 指定每个 shell 分配的最大内存量,包括 shell 的子进程。默认为 150 MB。

【讨论】:

  • 感谢您的回复。该页面有许多默认参数,使用 winrm 的人必须签出。
  • 使用远程/后台作业意味着您将处理受限的运行空间和返回的反序列化对象。在本地/不受约束的运行空间中工作的东西可能需要重构才能在该环境中工作。
【解决方案2】:

作为 mjolinor 答案的补充,您可以通过运行更改 MaxMemoryPerShellMB:

sl WSMan:\localhost\Shell
Set-Item MaxMemoryPerShellMB 300

参考:http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/30/learn-how-to-configure-powershell-memory.aspx

【讨论】:

    【解决方案3】:

    完整的 PowerShell 脚本,基于 mjolinor 的回答,适用于任何想要跳过原因并使其工作的人:

    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1000000
    Set-Item WSMan:\localhost\Plugin\Microsoft.PowerShell\Quotas\MaxMemoryPerShellMB 1000000
    Restart-Service WinRM
    

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多