通过 Import-CliXML 应用 Exchange 公用文件夹权限导入

通过 Import-CliXML 应用 Exchange 公用文件夹权限导入

我确实遇到了情况我失去了通过组分配的所有公共文件夹权限。

在从我们的 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 会话以更快地应用更改。

  1. PS 会议: foreach($pf in $pfs[0..2000]) ......

  2. 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}

相关内容