多租户场景下跨语言获取Get-MailBoxFolderPermission权限方案咨询
跨语言邮箱文件夹权限查询实现方案
原有代码失效原因
- 第一版过滤逻辑存在语法错误:
$_.FolderName -eq ":\FolderName" -or ":\Calendar"中-or后未补全判断条件,PowerShell会直接将字符串:Calendar判定为布尔值$true,导致过滤条件永远成立,完全失去筛选作用。同时FolderName属性仅返回文件夹名称本身,不携带:\\前缀,匹配字符串格式错误。 - 第二版判断逻辑对属性理解错误:
FolderType是Exchange定义的固定枚举值,和本地化的文件夹显示名、路径格式均无关,用路径字符串匹配该属性永远无法命中。
最优解决方案(完全兼容多语言)
不要硬编码文件夹显示名,通过固定的FolderType枚举值匹配目标文件夹,该枚举值不会随租户语言变化,适配所有语言场景:
# 配置需要查询的目标默认文件夹类型,可多个同时查询,枚举值固定不随语言变化 # 常见枚举值:Calendar(日历)、Inbox(收件箱)、SentItems(已发送邮件)、Contacts(联系人)、DeletedItems(已删除邮件) $targetFolderTypes = @("Calendar") # 先拉取用户所有文件夹统计,匹配目标类型 $matchedFolders = Get-MailboxFolderStatistics -Identity $userAsked -FolderScope All | Where-Object { $_.FolderType -in $targetFolderTypes } # 遍历匹配到的文件夹查询权限 foreach ($folder in $matchedFolders) { $folderIdentity = "{0}:{1}" -f $userAsked, $folder.FolderPath Get-MailboxFolderPermission -Identity $folderIdentity | Select-Object FolderName, User, AccessRights }
临时兼容方案(仅适配指定两种语言,不推荐)
如果你确实需要按显示名匹配两种固定语言的文件夹,修正后的写法如下:
$permCalendar = Get-MailBoxFolderPermission -Identity $userAsked | Where-Object { $_.FolderName -eq "FolderName" -or $_.FolderName -eq "Calendar" } | Select-Object FolderName, User, AccessRights
内容的提问来源于stack exchange,提问作者Niquuu
相关产品推荐
相关产品推荐

