我的任务是创建一个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 }}
答案 0 :(得分:0)
该错误消息似乎是性能限制或I / O超时(有关此问题的示例,请参阅this blog entry from MS)。我有几个想法尝试:
$PopGroup = Get-MSOLGroup -SearchString "POP Exception"
尝试使用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
}
}