我们有一个部署脚本失败,并显示以下错误消息:没有足够的配额来处理此命令。
在失败之前,它已经尝试启动同一可执行文件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会话外部运行无错误。
如果需要帮助我们回答这个问题,我可以提供有关脚本运行方式的更多细节。
答案 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插件也对此具有自己的设置。
找到了该解决方案