如何获取Office 365日历文件夹语言标识以适配权限配置脚本
解决多语言环境下Exchange日历权限配置问题
直接使用固定路径:\Calendar执行Add-MailboxFolderPermission仅适用于英文语言环境,针对比利时多语言(荷兰语、法语、德语)用户的场景,需要根据用户的语言配置动态匹配日历文件夹名称,具体实现步骤如下:
1. 获取用户的语言设置
使用Get-MailboxRegionalConfiguration命令读取目标用户的语言配置:
$targetUser = "user1@company.com" $userLang = (Get-MailboxRegionalConfiguration -Identity $targetUser).Language
返回的语言代码示例:en-US(英文)、nl-BE(荷兰语)、fr-BE(法语)、de-DE(德语)。
2. 建立语言与日历名称的映射关系
通过哈希表存储不同语言对应的标准日历文件夹名称:
$calendarNames = @{ "en-US" = "Calendar" "nl-BE" = "Agenda" "fr-BE" = "Calendrier" "de-DE" = "Kalender" # 德语日历标准名称 }
3. 动态生成并执行权限配置命令
根据用户语言匹配日历名称,拼接命令后执行:
$grantUser = "user2@company.com" # 获取对应日历名称,未知语言默认使用英文Calendar $calendarName = $calendarNames[$userLang] ?? "Calendar" # 拼接完整的Identity参数 $identity = "$targetUser`:$calendarName" # 添加权限 Add-MailboxFolderPermission -Identity $identity -User $grantUser -AccessRights Reviewer
批量处理所有员工的场景
如果需要给所有员工的日历添加权限,可结合Get-Mailbox批量遍历:
$grantUser = "user2@company.com" $calendarNames = @{ "en-US" = "Calendar" "nl-BE" = "Agenda" "fr-BE" = "Calendrier" "de-DE" = "Kalender" } # 获取所有邮箱账号 $allMailboxes = Get-Mailbox -ResultSize Unlimited foreach ($mailbox in $allMailboxes) { try { $userLang = (Get-MailboxRegionalConfiguration -Identity $mailbox.PrimarySmtpAddress).Language $calendarName = $calendarNames[$userLang] ?? "Calendar" $identity = "$($mailbox.PrimarySmtpAddress)`:$calendarName" Add-MailboxFolderPermission -Identity $identity -User $grantUser -AccessRights Reviewer -ErrorAction Stop Write-Host "✅ 已成功配置 $($mailbox.PrimarySmtpAddress) 的日历权限" } catch { Write-Host "❌ 处理 $($mailbox.PrimarySmtpAddress) 失败: $_" -ForegroundColor Red } }
注意事项
- 若使用PowerShell 5.x,不支持
??空合并操作符,可替换为:if (-not $calendarName) { $calendarName = "Calendar" } - 可根据实际业务扩展哈希表中的语言-名称映射,覆盖更多语言场景
- 批量操作时加入
try/catch块,避免单个账号处理失败导致整个脚本终止
内容的提问来源于stack exchange,提问作者Toto
相关产品推荐
相关产品推荐

