【问题标题】:Does PowerShell have a limit that causes the error Not enough quota is available to process this command?PowerShell 是否有导致错误的限制没有足够的配额可用于处理此命令?
【发布时间】:2018-09-04 19:40:35
【问题描述】:

我们的部署脚本失败并显示错误消息:没有足够的配额可用于处理此命令。

当它失败时,它试图在已经启动同一个可执行文件 10 次后异步启动一个可执行文件。所以11号失败了。一共需要启动17个。此脚本不是用 PowerShell 编写的,但我们使用远程 PowerShell 会话来启动它,并且仅当我们通过 PowerShell 远程运行脚本时才会发生此错误。

如果我们直接在服务器上运行相同的脚本而不使用 PowerShell 远程处理,我们不会收到此错误,并且该脚本可以启动所有 exe 实例(总共 17 个)并顺利完成。

我已经检查了我怀疑可能是错误原因的典型 WSMAN 限制,据我所知,它们被设置为无限制。起初我想也许 MaxProcessesPerShell 设置得太低了。以下是运行它的服务器上 WSMAN 驱动器的结果:

我们目前有这些 WSMAN 设置:

> WSMan:\localhost\Shell> dir

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Shell

Type            Name                           SourceOfValue   Value
----            ----                           -------------   -----
System.String   AllowRemoteShellAccess                         true
System.String   IdleTimeout                                    7200000
System.String   MaxConcurrentUsers                             2147483647
System.String   MaxShellRunTime                                2147483647
System.String   MaxProcessesPerShell                           2147483647
System.String   MaxMemoryPerShellMB                            2147483647
System.String   MaxShellsPerUser                               2147483647

是否有任何其他 PowerShell 或 WSMAN 设置可能导致此错误?

针对 Not enough quota... 错误推荐的典型解决方案包括增大页面文件。我还没有尝试过,因为脚本在 PowerShell 会话之外运行时没有错误。

如果需要帮助回答这个问题,我可以提供更多关于我们的脚本正在做什么的细节。

【问题讨论】:

  • 这不是 PS 独有的,它发生的原因有很多。我知道您只能在远程会话中看到它。您是否在每次运行时释放所有定义的资源?如果没有,你应该,否则你可能有很多东西在咀嚼他们不应该拥有的资源。如果您多次运行此程序,您是否考虑过并行处理?工作流/运行空间
  • @postanote 据我所知,脚本启动的每个 exe 实例都会消耗资源,然后在每个 exe 实例退出时释放它们。我们正在使用并行处理。这就是为什么我们启动 17 个 exe 实例并等待它们全部完成的原因。我同意该错误似乎与 PowerShell 无关,但我们已反复尝试过此操作,并且仅在远程 PowerShell 会话中启动脚本时才会出现配额不足错误。我什至可以在服务器上使用 PowerShell 提示符运行脚本,并且它可以正常运行。

标签: powershell windows-server-2012-r2 wsman


【解决方案1】:

导致我的错误的配额限制是 PowerShell 32 位插件上的 MaxProcessesPerShell 设置。此设置独立于 Shell 设置。为了解决这个问题,我在远程 PowerShell 会话中运行了以下命令...

 dir WSMan:\localhost\Plugin\microsoft.powershell32\Quotas\MaxProcessesPerShell

结果...

Type            Name                           SourceOfValue   Value
----            ----                           -------------   -----
System.String   MaxProcessesPerShell                           15

使用...将设置更改为 25

Set-Item WSMan:\localhost\Plugin\microsoft.powershell32\Quotas\MaxProcessesPerShell 25

使用...重新启动 WinRM 服务

Restart-Service WinRM

尝试在此新配额生效的情况下再次运行问题脚本,它现在启动了所有 17 个 exe 实例,没有任何错误。还有一个 64 位 PowerShell 插件,它也有自己的设置。

这个解决方案在这里找到Not enough quota is available to process this command

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多