使用Powershell和大型O365租户

时间:2018-04-10 22:36:23

标签: powershell office365

我的任务是创建一个PowerShell脚本,该脚本每天都会爬过我们的一个客户Office365环境,并禁止对不在特定安全组中的任何人进行POP / IMAP访问。

我编写了代码并且它可以工作,直到它通过我们的~5000 +邮箱大约75%的路径,然后它开始失败,“在远程服务器上启动命令失败,并显示以下错误消息:由于线程退出或应用程序请求,I / O操作已中止。更多“

我认为由于存在这么多邮箱而导致超时,但不确定如何更有效地编写我的脚本?有什么想法吗?

Connect-EXOPSSession

Connect-MSOLService

$PopGroup = Get-MSOLGroup -All | Where-Object {$_.DisplayName -eq "POP Exception"}

$ImapGroup = Get-MSOLGroup -All | Where-Object {$_.DisplayName -eq "IMAP Exception"}

$EnablePOP = Get-MSOLGroupMember -GroupObjectId $PopGroup.ObjectId -All | Select-Object -ExpandProperty DisplayName

$EnableImap = Get-MSOLGroupMember -GroupObjectId $ImapGroup.ObjectId -All | Select-Object -ExpandProperty DisplayName

$Mailboxes = $Mailboxes = Get-Mailbox -ResultSize Unlimited

ForEach ($Mailbox in $Mailboxes) { 
  If ($EnablePop -Contains $Mailbox) { 
      $Mailbox | Set-CASMailbox -PopEnabled $True } 
  Else { 
      $Mailbox | Set-CASMailbox -PopEnabled $False } 
  If ($EnableImap -Contains $Mailbox) { 
      $Mailbox | Set-CASMailbox -ImapEnabled $True } 
  Else { 
      $Mailbox | Set-CASMailbox -ImapEnabled $False }}

1 个答案:

答案 0 :(得分:0)

该错误消息似乎是性能限制或I / O超时(有关此问题的示例,请参阅this blog entry from MS)。我有几个想法尝试:

  1. 您的Get-MSOLGroup -ALL命令正在提取整个AD组列表然后进行过滤,最好指定UPN或SearchString来过滤您的请求。有关PS的示例和常见性能提示,请参阅this link。试试$PopGroup = Get-MSOLGroup -SearchString "POP Exception"
  2. 尝试使用Get-CASMailbox而不是获取包含所有数据的所有邮箱:

    Get-CASMailbox -ResultSize Unlimited | foreach-object {
      $upn = "$_@YOURDOMAIN.COM"
      if($_.POPEnabled -eq $true -and $(!($EnablePop.EmailAddress -Contains $upn))){
        Set-CASMailbox -Identity $upn -PopEnabled $false
      } elseif ($_.POPEnabled -eq $false -and $EnablePop -Contains $upn){
        Set-CASMailbox -Identity $upn -PopEnabled $true
      }
      if($_.ImapEnabled -eq $true -and $(!($EnableImap -Contains $upn))){
        Set-CASMailbox -Identity $upn -ImapEnabled $false
      } elseif($_.ImapEnabled -eq $false -and $EnablePop -Contains $upn){
        Set-CASMailbox -Identity $upn -ImapEnabled $true
      }
    }