Exchange Online脚本优化:仅处理非PublishingEditor权限的日历邮箱
解决Exchange Online日历权限批量设置的优化问题
我看了你的脚本,问题出在你没有实际获取日历文件夹的权限信息——你定义的$path只是一个字符串格式的文件夹标识路径,根本没有AccessRights这个属性,所以你的条件判断完全起不到作用,脚本自然会遍历所有邮箱。
下面是修正后的脚本,核心是先获取每个日历文件夹的Default用户权限,再做判断:
$allmailbox = Get-Mailbox -ResultSize Unlimited Foreach ($Mailbox in $allmailbox) { # 获取日历文件夹的名称,兼容不同语言环境 $calendarFolder = Get-MailboxFolderStatistics $Mailbox.Alias | Where-Object { $_.FolderType -eq "Calendar" } | Select-Object -First 1 if (-not $calendarFolder) { Write-Host "⚠️ 无法找到邮箱 $($Mailbox.Alias) 的日历文件夹,跳过" continue } $path = "$($Mailbox.Alias):\$($calendarFolder.Name)" # 获取Default用户的当前权限 try { $currentPermission = Get-MailboxFolderPermission -Identity $path -User Default -ErrorAction Stop } catch { Write-Host "⚠️ 获取邮箱 $($Mailbox.Alias) 日历权限失败:$_" continue } # 判断权限是否需要更新 if ($currentPermission.AccessRights -notcontains "PublishingEditor") { Set-MailboxFolderPermission -Identity $path -User Default -AccessRights PublishingEditor Write-Host "✅ 已更新邮箱 $($Mailbox.Alias) 的日历Default权限为PublishingEditor" } else { Write-Host "ℹ️ 邮箱 $($Mailbox.Alias) 的日历Default权限已经是PublishingEditor,无需操作" } }
关键修正点说明:
- 新增了
Get-MailboxFolderPermission来获取Default用户的实际权限,这是判断的核心依据 - 增加了错误处理:比如找不到日历文件夹、获取权限失败的情况,避免脚本中断
- 用
-notcontains而不是-ne,因为AccessRights可能是一个权限集合(虽然这里通常是单个值,但用集合判断更严谨) - 优化了输出信息,让你更清楚每个邮箱的处理状态
额外提示:
如果你的组织有不同语言版本的Outlook,日历文件夹名称可能不同(比如中文是“日历”,英文是“Calendar”),用FolderType筛选是最可靠的方式,你的原代码这部分是对的。
内容的提问来源于stack exchange,提问作者Lenny87
相关产品推荐
相关产品推荐

