我确实遇到了情况我失去了通过组分配的所有公共文件夹权限。
在从我们的 MSEX2016 服务器迁移到 Office 365 之前,所有权限都已导出到 XML 文件,我认为(在这Microsoft 页面)使用以下命令发生了这种情况:
Get-PublicFolder -Recurse -ResultSize Unlimited | Get-PublicFolderClientPermission | Select-Object Identity,User,AccessRights -ExpandProperty AccessRights | Export-CliXML OnPrem_PFPerms.xml
输出文件“OnPrem_PFPerms.xml”大约有 5 GB。对于仅对大约 300 GB 的 PF 结构进行权限管理而言,这对我来说听起来很大,但可能是由于 XML 格式的复杂性导致其大小巨大。7-Zip 压缩将其压缩至 25 MB,这意味着其中有大量冗余数据。
在我们之前迁移到 MSEX2016 的 MSEX2010 上有一个大约 500 MB 的“Legacy_PFPerms.xml”文件。
将 XML 文件中的所有权限应用于 Office 365/Exchange 在线上的公共文件夹结构的正确 PowerShell 命令是什么?
我猜想 Import-CliXML 会以某种方式完成这项工作,但我对 PowerShell 不太熟悉,无法构建正确的命令。
答案1
最后,以下 PowerShell 脚本允许我将 XML 文件中的所有权限应用于公共文件夹结构。感谢王伊凡他的回答为我指明了正确的方向。
$pfs = Import-Clixml -Path OnPrem_PFPerms.xml
foreach($pf in $pfs)
{
Add-PublicFolderClientPermission -Identity ("\" + $($pf.Identity.MapiFolderPath -join "\")) -User $pf.User.DisplayName -AccessRights $pf.AccessRights[0].ToString()
}
由于运行速度相当慢,因此也可以将其分成多个 PowerShell 会话以更快地应用更改。
PS 会议:
foreach($pf in $pfs[0..2000])
......PS 会议:
foreach($pf in $pfs[2001..4000])
......
...
请勿一次运行太多会话,否则将中断与 Exchange Online 的连接并显示以下消息:
The request is not serviced on the server. Your request is too frequent.
答案2
.xml 文件中包含哪些属性?如果有身份和用户,访问权,你可以尝试:
$pfs = Import-Clixml -Path OnPrem_PFPerms.xml
foreach($pf in $pfs)
{
Add-PublicFolderClientPermission -Identity $pf.Identity -User $pf.User -AccessRights $pf.AccessRights
}
根据上面的命令,它似乎只导出访问权对象。如果是这样,您可能需要将 Exchange Online 中的当前 ACL 列表导出到 .csv 文件:
Get-PublicFolder -Recurse -ResultSize Unlimited | Get-PublicFolderClientPermission | Select-Object Identity,User,@{n="AccessRights";e={[String]($_.AccessRights)}} -ExpandProperty AccessRights | Export-Csv pf.csv
并通过 PowerShell 重新将公用文件夹的权限分配给您的用户(对于现有的权限条目,PowerShell 将报告警告:已找到用户的现有权限条目):
$pfs = Import-Csv pf.csv
foreach($pf in $pfs)
{
Add-PublicFolderClientPermission -Identity $pf.Identity -User $pf.User -AccessRights $pf.AccessRights
}
答案3
如果源 Exchange 服务器仍然可用,您可以使用以下方法将公用文件夹客户端权限导出到 CSV 文件并将其导入 Office 365。您可能需要编辑源 CSV 文件以编辑用户名,使其与权限中存在的每个用户的 Office 365 用户名匹配。
将公用文件夹权限导出到 CSV:
Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | 选择身份,用户,@{表达式={$_.AccessRights}; 标签='AccessRights' } | Export-Csv C:\Temp\PublicFolderClientPermission.csv
从 CSV 导入公用文件夹权限:
$Users=Import-CSV C:\Temp\PublicFolderClientPermission.csv foreach($Users 中的 ($User){Get-PublicFolder -Identity $($User.identity) | add-publicfolderclientpermission -AccessRights $User.AccessRights -User $User.User}