如何处理(避免):"Fail to create runspace because you have exceeded your budget to create runspace."



我在PowerShell核心堆栈上有HTTP触发的Azure功能应用程序。脚本正在分析请求的正文,假设一切正常,它连接到Exchange Online,然后执行2个cmdlet来创建MailContact类型的联系人。最后,它断开了与Exchange Online的连接。我有一个控制台应用程序,它正在执行POST请求,为身体中的一个联系人传递JSON数据。请求在for each循环中执行,在第5次成功请求后,我得到的运行空间超出预算错误。

脚本中的一些代码片段

try {
Connect-ExchangeOnline -CertificateThumbprint $thumb -AppId $appId -Organization $org -Showbanner:$false -CommandName Get-Contact,Get-MailContact,New-MailContact,Set-Contact,Set-MailContact,Remove-MailContact
New-MailContact -ErrorAction stop @p | Out-Null
Set-Contact -ErrorAction stop @parameters | Out-Null
} 
catch {
...
} 
finally {

Disconnect-ExchangeOnline -Confirm:$false -InformationAction Ignore -ErrorAction SilentlyContinue

Get-PSSession | Remove-PSSession    
}

我尝试了什么(没有成功(:

  • 放宽Exchange Online限制策略(https://www.michev.info/Blog/Post/3205/self-service-powershell-throttling-policy-relaxation-for-exchange-online)
  • 设置不同的环境变量(如PSWorkerInProcCurrentUpperBound和FUNCTIONS_WORKER_PROCESS_COUNT(

工作原理:拥有额外的Function App,然后在两者之间每5个请求循环一次。

可能有帮助的其他信息:

  • PSWorkerInProcCurrentUpperBound=1000
  • FUNCTIONS_WORKER_PROCESS_COUNT=10
  • 函数运行时版本=~4
  • PowerShell核心版本=7
  • 平台=64位
  • 计划类型=消耗(无服务器(

此外,从发送请求到得到响应大约需要7-8秒。连接到Exchange Online需要花费大量时间。

有任何帮助或提示如何解决运行空间预算错误吗?

一个肮脏的解决方法是:

try {
Connect-ExchangeOnline @ConnectExchange
} catch {
Write-Verbose -Verbose ($_.Exception.Message)
$Wait = ($_.Exception.Message) | Select-String ('(?<=for )(.*)(?= seconds)') -AllMatches
$Count = ([int]$Wait.Matches.Value)
Start-Sleep -seconds $Count

Connect-ExchangeOnline @ConnectExchange
}

相关内容

最新更新