嵌套的ForEach语句-Exchange Powershell-大容量删除邮箱日历权限-

嵌套的ForEach语句-Exchange Powershell-大容量删除邮箱日历权限-,powershell,foreach,exchange-server,outlook-calendar,Powershell,Foreach,Exchange Server,Outlook Calendar,这是我的第一篇帖子;我对powershell很陌生 应客户请求,我正在更改Exchange 365中所有用户的日历访问权限。 我使用在上找到的代码将所有邮箱的默认值设置为“Reviewer”: 并且,我可以使用我从上面编造的脚本从指定邮箱中删除所有其他用户的权限: 我希望了解如何在一个命令中删除所有邮箱的所有显式权限,以便将来使用;我认为这将涉及嵌套的foreach语句,但我正在努力使双循环正确 它需要像这样运行: $users=获取邮箱 foreach$user{remove mailboxf

这是我的第一篇帖子;我对powershell很陌生

应客户请求,我正在更改Exchange 365中所有用户的日历访问权限。 我使用在上找到的代码将所有邮箱的默认值设置为“Reviewer”:

并且,我可以使用我从上面编造的脚本从指定邮箱中删除所有其他用户的权限:

我希望了解如何在一个命令中删除所有邮箱的所有显式权限,以便将来使用;我认为这将涉及嵌套的foreach语句,但我正在努力使双循环正确

它需要像这样运行:

$users=获取邮箱

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

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

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

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

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

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

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

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

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

但是它从同一个数组中提取user.alias,所以在我的实验中,它要么运行一次(与-identity和-user的条目相同),要么失败并出现错误,要么永远运行

关于从同一来源进行嵌套ForEach提取的任何帮助、提示或一般建议都会很有帮助。

为了嵌套“for”循环,您需要准备好信息,或者找到一种查找信息的方法,以便包装您的循环

您不希望必须在每个邮箱上指定每个用户的别名,因此最好的方法是使用
Get-MailboxFolderPermission
cmdlet。您的第一个循环(通过每个用户循环)是正确的。您的第二个循环可能需要一些帮助,因为您不想手动输入每个拥有权限的用户。您的代码最终应该是这样的:

$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
  }
}

我没有exchange环境来测试这一点,但我认为这确实为您指明了正确的方向,使您能够填写您的环境详细信息。

在您的第一个foreach循环中,获取该日历上所有权限的列表,而不是显式调用每个用户删除其权限,然后对于第二个foreach循环,使用
foreach($permissions中的permission){code删除权限}
Hi@bryce mcdonald,谢谢您的帮助;我还没破解,但你给我指出了正确的方向。
 $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}
$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
  }
}