Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-Exchange-删除几乎所有邮箱权限_Powershell_Exchange Server_Rights - Fatal编程技术网

Powershell-Exchange-删除几乎所有邮箱权限

Powershell-Exchange-删除几乎所有邮箱权限,powershell,exchange-server,rights,Powershell,Exchange Server,Rights,我最初的问题有点复杂。然而,一些很酷的会员确实设法帮助了我 我从Vesper那里得到了以下代码: $mailbox=get-mailbox $username $perms=get-mailboxpermission $mailbox | where {$_.isinherited -eq $false -and $_.user.toString() -ne "NT AUTHORITY\SELF"} $perms | remove-mailboxpermission $mailbox -conf

我最初的问题有点复杂。然而,一些很酷的会员确实设法帮助了我

我从Vesper那里得到了以下代码:

$mailbox=get-mailbox $username
$perms=get-mailboxpermission $mailbox | where {$_.isinherited -eq $false -and $_.user.toString() -ne "NT AUTHORITY\SELF"}
$perms | remove-mailboxpermission $mailbox -confirm:$false
当我在ExchangePowerShell中逐个运行这些命令时,效果非常好。但是,当我尝试运行包含该代码段的完整脚本时,我收到以下错误:

Cannot process argument transformation on parameter 'Identity'. Cannot convert the "USERNAME" value of type
"Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox" to type
"Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter".
    + CategoryInfo          : InvalidData: (:) [Get-MailboxPermission], ParameterBindin...mationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-MailboxPermission
    + PSComputerName        : SERVER

你知道如何解决这个问题吗?

快速而肮脏的解决方案可能是这样的:

$mailbox=get-mailbox $user #populate this first
$perms=get-mailboxpermissions $mailbox | where {$_.isinherited -eq $false -and $_.user.toString() -ne "NT AUTHORITY\SELF"}
$perms | remove-mailboxpermission $mailbox -whatif
请注意,此脚本的错误用户可能会破坏您的Exchange组织,可能会在单个邮箱上进行测试。该脚本未经测试,但符合Exchange和Powershell上的手册

说明:第一行获取有问题的邮箱。第二行首先获取Exchange邮箱对象上的完整ACL,然后仅筛选那些未继承的条目。
$\u IsInherited-eq$false
,并筛选出
NT AUTHORITY\SELF
,这是某个人访问邮箱所必需的—此条目不被继承。其他所有内容都被视为您希望删除的权限(这些权限直接添加到邮箱中,因此不会被继承)。第三行删除通过对管道调用
Remove MailboxPermission
确定的权限。请注意
-whatif
开关,该开关使cmdlet显示将要执行的操作,以便管理员在将脚本启动到生产环境之前进行查看。

John

我遇到了完全相同的问题

我做了一个改变,它把问题推了下去,但没有解决它



我只是在$Mailbox后面添加了.DisplayName,这解决了权限的获取问题,但现在我无法删除它们。我卡住了

每个人都在看这个并问为什么

在Exchange 2010 Service Pack 1(SP1)中,Exchange引入了一项功能,[强制]允许Outlook 2007和Outlook 2010客户端自动映射到用户具有完全访问权限的任何邮箱。如果授予用户对其他用户邮箱或共享邮箱的完全访问权限,Outlook将自动加载该用户具有完全访问权限的所有邮箱

当您的邮箱有权访问其他林中的邮箱时,这个可爱的小功能会导致问题。

我发现了它

 foreach($Mailbox in $Mailboxes){
    $FixAutoMappings = Get-MailboxPermission $Mailbox.DisplayName |where {$_.AccessRights -eq "FullAccess" -and $_.IsInherited -eq $false}
    $FixAutoMappings 
        Foreach($FixAutoMapping in $FixAutoMappings){
        Remove-MailboxPermission -Identity $Mailbox.Identity -User $FixAutoMapping.User -AccessRights $FixAutoMapping.AccessRights -confirm:$false
        Add-MailboxPermission -Identity $Mailbox.Identity -User $FixAutoMapping.User -AccessRights:FullAccess -AutoMapping $false
        }
}

这似乎对我有用。

嘿,约翰,欢迎来到SO。这是一个相当高的要求。我们不是代码编写服务,也不是资源定位工具。我们在这里帮助程序员和编程爱好者。您自己应该能够将此请求分解为多个部分,然后自己尝试。当你遇到一个特定的问题时,展示你的工作,你需要什么,社区会非常愿意帮助你。你好,马特。我完全理解。我已经试着把一些东西放在一起,但不幸的是,我真的不知道从哪里开始。我想那时我会继续浏览互联网,看看我能走多远。无论如何,谢谢。
Get Mailbox
Get ADPermission
将是开始的地方。我已经知道这些命令了。我陷入困境的是,我如何才能遍历该特定邮箱上的权限,识别需要保留的标准权限并删除所有其他权限。我在考虑获得邮箱许可。导出该结果,然后再次导入,并遍历权限,仅删除非标准权限。因此,您需要从禁用用户的邮箱中删除不特定于Exchange系统的“所有用户权限”?您应该使用Exchange的cmdlet来获得权限(
Get-MailboxPermission
等),而不是AD的cmdlet。这个问题很可能很快就解决了,这将使您在这里的工作变得不必要。鼓励这类问题通常不是一种好的形式。或者,如果没有其他信息,请添加一些关于如何通过链接到“帮助”来提出一个好问题的信息。“删除”将使我的努力变得不必要,事实上,“关闭”会减少,如果OP能够找到答案并发现它有用的话。无论如何,我也需要练习,因此通常会为我呈现一些任务,以免我的思维因误用而腐朽:)符合特定标准的封闭式问题会被爬网过程自动删除。谢谢你,维斯帕。我将保存您建议的解决方案,使其不会被删除:)。我已经在忙着用if-else语句解决一些问题了。也许在你的帮助下,我现在可以想出一些办法。再次感谢你。
 foreach($Mailbox in $Mailboxes){
    $FixAutoMappings = Get-MailboxPermission $Mailbox.DisplayName |where {$_.AccessRights -eq "FullAccess" -and $_.IsInherited -eq $false}
    $FixAutoMappings 
        Foreach($FixAutoMapping in $FixAutoMappings){
        Remove-MailboxPermission -Identity $Mailbox.Identity -User $FixAutoMapping.User -AccessRights $FixAutoMapping.AccessRights -confirm:$false
        Add-MailboxPermission -Identity $Mailbox.Identity -User $FixAutoMapping.User -AccessRights:FullAccess -AutoMapping $false
        }
}