PowerShell是否具有导致错误的限制?没有足够的配额来处理此命令?

时间:2018-09-04 19:40:35

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

我们有一个部署脚本失败,并显示以下错误消息:没有足够的配额来处理此命令。

在失败之前,它已经尝试启动同一可执行文件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设置?

配额不足... 错误推荐的典型解决方案包括增大Page文件的大小。我还没有尝试过,因为该脚本在PowerShell会话外部运行无错误。

如果需要帮助我们回答这个问题,我可以提供有关脚本运行方式的更多细节。

1 个答案:

答案 0 :(得分:0)

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

DECLARE @ReturnValue INT
DECLARE @Field1 VARCHAR(50) = 'Gary'

IF EXISTS ( SELECT 'the searched field exists!!'
            FROM [Workflow Creation].[dbo].[ssFields] 
            WHERE Field1 = @Field1)
BEGIN
    SET @ReturnValue = 1 -- Don't use literals if it's a number!
END
ELSE
BEGIN
    SET @ReturnValue = 0 -- Don't use literals if it's a number!
END

结果...

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

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

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

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

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

尝试使用新的配额再次运行问题脚本,现在它会启动exe的所有17个实例,而不会出现任何错误。还有一个64位PowerShell插件也对此具有自己的设置。

在这里Not enough quota is available to process this command

找到了该解决方案