Применение импорта разрешений для общих папок Exchange через Import-CliXML

я столкнулся с ситуацией , когда я потерял все свои разрешения на общие папки, которые были назначается через группы.

До того, как началась миграция с нашего сервера 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, чтобы создать правильную команду.

0
задан 18 October 2021 в 13:01
3 ответа

Наконец, следующий сценарий 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
ответ дан 19 October 2021 в 13:38

Если исходный сервер 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}

0
ответ дан 18 October 2021 в 17:15

Какие свойства включены в 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
}
1
ответ дан 19 October 2021 в 07:30

Теги

Похожие вопросы