Вложенные операторы ForEach - Exchange Powershell - массовое удаление разрешений календаря почтовых ящиков - - PullRequest
0 голосов
/ 18 мая 2018

Это мой первый пост;Я довольно новичок в powershell.

По запросу клиента я изменяю права доступа к Календарю для всех пользователей в их Exchange 365. Я установил значение по умолчанию «Рецензент» для всех почтовых ящиков, используя найденный кодна Spiceworks :

$users = get-mailbox
foreach ($user in $users) {set-mailboxfolderpermission -identity $($user.alias):\calendar" -User Default -AccessRights Reviewer  -confirm:$false}

И я могу удалить все разрешения других пользователей из указанного почтового ящика, используя сценарий, который я придумал из приведенного выше:

 $users = get-mailbox
    foreach ($user in $users) {Write-host -foregroundcolor green "Removing permission for $($user.alias)..."
    remove-mailboxfolderpermission -identity username:\calendar -user $user.alias -confirm:$false}

Я надеялся найти способ удалить все явные разрешения из всех почтовых ящиков в одной команде для любого будущего использования;Я думаю, что это будет включать вложенные операторы foreach, но я изо всех сил пытаюсь получить правильный двойной цикл.

Необходимо запустить что-то вроде этого:

$ users = get-mailbox

foreach $ user {remove-mailboxfolderpermission -identity user1 .alias: \ calendar -user $ user1 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user1 .alias: \ calendar -user $ user2 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user1 .alias: \ calendar -user $ user3 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user1 .alias: \ calendar -user $ user4 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user2 .alias: \ calendar -user $ user1 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user2 .alias: \ calendar -user $ user2 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user2 .alias: \ calendar -user $ user3 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user2 .alias: \ calendar -user $ user4 .alias}

foreach $ user {remove-mailboxfolderpermission -identity user3 .alias: \ calendar -user $ user1 .alias}

И т. Д.

Но он вытягивает user.alias из того же массива, поэтому в моих экспериментах он либо запускается один раз (та же запись для -identity и -user), либо завершается с ошибкой или выполняется вечно.

Будет полезна любая помощь, советы или общие рекомендации относительно вложенного извлечения ForEach из того же источника.

1 Ответ

0 голосов
/ 21 мая 2018

Чтобы вложить циклы "for", вам нужно подготовить информацию или найти информацию, чтобы обернуть ваш цикл.

Вы не хотите, чтобыукажите псевдоним каждого пользователя в каждом почтовом ящике, поэтому лучший способ сделать это - использовать командлет Get-MailboxFolderPermission.Ваш первый цикл, проходящий через каждого пользователя, правильный.Ваш второй цикл может использовать некоторую помощь, поскольку вам не нужно вручную вводить каждого пользователя, у которого есть разрешения.В конце ваш код должен выглядеть примерно так:

$users = Get-Mailbox
ForEach ($user in $users) {
  $perms = Get-MailboxFolderPermission -identity $user.alias:\Calendar | Format-List
  ForEach ($perm in $perms) {
    Remove-MailboxFolderPermission -identity $user.alias:\calendar -user $perm.user
  }
}

У меня нет среды обмена для проверки этого, но я думаю, что это действительно должно указать вам правильное направление, чтобы можно было заполнитьдетали вашего окружения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...