я столкнулся с ситуацией , когда я потерял все свои разрешения на общие папки, которые были назначается через группы.
До того, как началась миграция с нашего сервера 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 ГБ. Это звучит много для разрешений только для структуры PF размером около 300 ГБ, но, возможно, ее огромный размер вызван сложностью формата XML. 7-Zip-сжатие уменьшает его размер до 25 МБ, что означает, что в нем много избыточных данных.
В нашем MSEX2010, который ранее был перенесен на MSEX2016, есть файл «Legacy_PFPerms.xml» размером около 500 МБ.
Какой должна быть правильная команда PowerShell для применения всех разрешений из XML-файла к структуре общих папок в Office 365/Exchange Online?
Думаю, Import-CliXML как-то справится с этой задачей, но я не настолько хорошо знаком с PowerShell, чтобы создать правильную команду.
Наконец, следующий сценарий 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.
Если исходный сервер Exchange все еще доступен, вы можете использовать следующее, чтобы экспортировать разрешения клиента общей папки в CSV-файл и импортировать их в Office 365. Возможно, вам потребуется отредактировать исходный CSV-файл, чтобы отредактировать имена пользователей, чтобы они соответствовали именам пользователей Office 365 для каждого пользователя, присутствующего в разрешениях.
Экспорт разрешений общей папки в CSV:
Get-PublicFolder -Recurse | Получить-PublicFolderClientPermission | Выберите «Идентификация», «Пользователь», @{ выражение = {$_.AccessRights}; label='AccessRights' } | Экспорт-CSV C:\Temp\PublicFolderClientPermission.csv
Импорт разрешений общих папок из CSV:
$Users= Import-CSV C:\Temp\PublicFolderClientPermission.csv foreach ($User в $Users){Get-PublicFolder -Identity $($User.identity)| add-publicfolderclientpermission -AccessRights $User.AccessRights -User $User.User}
Какие свойства включены в XML-файл? Если есть Identity и User , AccessRights , вы можете попробовать:
$pfs = Import-Clixml -Path OnPrem_PFPerms.xml
foreach($pf in $pfs)
{
Add-PublicFolderClientPermission -Identity $pf.Identity -User $pf.User -AccessRights $pf.AccessRights
}
На основании вашей команды выше, похоже, экспортируется только AccessRights объект. Если это так, вам может потребоваться экспортировать текущий список ACL в Exchange Online в файл.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
}