【问题标题】:Passing active powershell Session to background jobs将活动的 powershell 会话传递给后台作业
【发布时间】:2022-06-23 13:19:21
【问题描述】:

我正在编写一个 powershell 脚本来操作 Exchange Online 邮箱。

我希望此脚本与后台作业并行运行,因此我尝试使用 PoshRSJobs (https://github.com/proxb/PoshRSJob) 来创建作业。

我的代码是:

Connect-ExchangeOnline -Credentials ...
Start-RSJob -ModulesToImport ExchangeOnlineManagement -Throttle $ProcesosConcurrentes -InputObject $jobs -ScriptBlock {
  ./migra_buzon.ps1 ...
}

地点:

  • $jobs 是一个数组列表,其中有我要操作的邮箱的参数
  • migra_buzon.ps1 是另一个在一个指定邮箱上运行的 powershell 脚本

我以这种方式运行时遇到的问题是在作业中出现错误:

“Add-MailboxPermission”一词未被识别为 cmdlet、函数、脚本文件或可执行程序的名称。 检查名称的拼写,如果包含路径,请验证路径是否正确,然后重试。

虽然 Get-EXOMailbox 等其他命令运行正常。

寻求帮助我发现问题可能与会话有关,因此我将代码更改为:

Connect-ExchangeOnline -Credentials ...
Start-RSJob -ModulesToImport ExchangeOnlineManagement -Throttle $ProcesosConcurrentes -InputObject $jobs -ScriptBlock {
    $o365session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid" -Credential $(Import-Clixml $Using:ExchangeCredentials) -Authentication "Basic" -AllowRedirection
    Import-PSSession $o365Session -CommandName @('Add-MailboxPermission', 'Get-MailboxPermission')
    ./migra_buzon.ps1 ...
}

在这种情况下,我遇到的问题是 Exchange 连接。在运行了一些作业后,我收到了错误:

[outlook.office365.com] 处理来自远程服务器 outlook.office365.com 的数据失败,并显示以下错误消息:客户端未从服务器获得正确响应。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。 无法验证参数“会话”的参数。参数为空。为参数提供一个有效值,然后再次尝试运行该命令。

所以我的问题是,运行共享主进程中连接的后台作业的正确方法是什么?

谢谢

PS:我首先尝试使用 Start-Job 运行作业,但问题是每个后台作业都需要自己的连接,所以我得到了并且超出了最大连接数。这就是我将代码更改为 Start-RSJob 的原因

【问题讨论】:

  • 为什么不在每个工作的顶部调用Connect-ExchangeOnline -Credentials ...,然后一次只开始这么多?您将无法绕过连接限制,并且您将无法跨进程共享实时会话(作业在单独的子进程中运行)。
  • 这样我就限制了 5 个并发作业(或者 3 个,我不记得了),我需要更多并发。
  • Exchange cmdlet 不适用于多线程,因为每个帐户总共只能有 3 个连接。即使在您传递运行空间的全局变量中使用 Exchange 会话也不起作用(当您的租户拥有 30k+ 个邮箱时,这真的很糟糕)。我过去规避这种情况的方法是查看我想要执行的操作的替代方案(MS Graph、EWS 和 Outlook API)。
  • 我使用过 Graph,但我找不到配置交换的命令。如果其他 API 有我需要的命令,我会看看它们。

标签: powershell office365 exchange-server


【解决方案1】:

您似乎达到了 Exchange Online 限制。 如果确实如此,你可以试试下面的方法。

如何放松 PowerShell 限制

有一种相对较新的面向客户的方式来增加或更新 PowerShell 限制策略。

  1. 转到 Microsoft 365 管理中心。 验证您是否使用具有正确角色分配的用户登录。
  2. 单击需要帮助?右下角的小部件 图形用户界面
  3. 在搜索框中键入 Exchange PowerShell 限制,然后选择“临时更新迁移的限制策略”。请记住,这仅适用于 90 天。 90 天后,限制将恢复为该租户的默认值。

【讨论】:

  • 我认为这不是问题。节流与带宽速率有关,与连接数无关。事实上,我几周前就这样做了。
【解决方案2】:

MachSol 使用作业引擎提供租户管理,允许您使用前端执行多项操作,并让作业处理程序负责后台处理。你可以试试看:

https://www.machsol.com/machpanel-automation-for-microsoft-CSP-partners/

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多