您好,我创建了一个通用安全组。向此安全组添加了用户。在 Exchange 中,添加一个新的通讯组并选择此新安全组作为目标组。在将该组启用为“启用电子邮件的安全组”后,我尝试使用以下命令将该人的日历权限分配给该组:
add-MailboxFolderPermission -Identity USERID:\Calendar -User Sercuritygroupname -AccessRights Owner
然而它一遍又一遍地用红色写着
“无法执行该操作,因为找不到‘USERID:\Calendar’。
我只是用我的一个邮箱别名或 AD 用户名替换了 USERID,但两者都不被接受..或者它真的不喜欢后面的日历?
可能出了什么问题?有什么想法吗?
答案1
Exchange 日历子文件夹的本地化拼写
因此,该问题似乎与脚本中的硬编码有关,username:calendar
因为用户邮箱中日历的本地化名称的拼写与您使用的拼写不同。
username:calendar
因此,拼写的拼写可能不是username:kalendar
或username:agenda
取决于语言本地化。
下面是一些获取日历子文件夹拼写的方法,无需真正了解对象的本地化拼写;您可以将结果插入到相应的命令中,或者潜在地构建命令以根据以下内容动态获取它:可分辨文件夹 ID, ETC。
获取邮箱日历文件夹
Get-MailboxCalendarFolder -Identity <MailboxFolderIdParameter> [-DomainController <Fqdn>]
详细说明
这获取邮箱日历文件夹cmdlet 检索指定日历文件夹的信息。此信息包括日历文件夹名称、文件夹当前是否已发布或共享、已发布的日历天数的开始和结束范围、已发布的日历的详细程度、已发布的日历的 URL 是否可以在 Web 上搜索以及已发布的日历的 URL。
Powershell 获取默认日历名称
一种无需检查区域或语言属性即可获取默认日历文件夹名称的方法。
Get-mailbox | Get-MailboxFolderStatistics -FolderScope calendar | sort-object Name | ft Identity,Name
如果用户在邮箱中有多个日历,那么我就会得到多个对象。您必须遍历所有日历,或者使用“where-object”进行过滤,以获取默认日历。
$calname = Get-MailboxFolderStatistics -Identity $username -FolderScope calendar | where-object {$_.FolderType -eq "Calendar"} $calandar= $username + ":\" + $calname.Name.toString()
查找日历文件夹的名称
在设置用户的日历文件夹权限以允许(或禁止)他们查看彼此的空闲/忙碌状态时,您可能会遇到这样的问题:用户已将文件夹名称本地化,而您不知道该文件夹名称在他/她的语言中的含义。更糟糕的是,您正在脚本中执行此操作,而这只是使用标签
username:\Calendar
。这里的解决方案是不使用硬编码名称,而是而是检测文件夹的名称并在脚本(或命令行)中使用它。为了使这变得非常简单,您可以使用这段 PowerShell 代码:
$path = $user.Identity + ":\" + (Get-MailboxFolderStatistics $user.Identity | Where-Object { $_.Foldertype -eq "Calendar" } | Select-Object -First 1).Name Set-MailboxFolderPermission -Identity $path -User Default -AccessRights LimitedDetails
第一行将在 MailboxFolderStatistics 中搜索“日历”类型的文件夹并返回第一个匹配项。
第二行将使用变量
$path
来设置AccessRights
文件夹,而不管其本地化如何。该
$user
变量可以由 Get-User 或输入文件填充。