【问题标题】:Exchange 2010 PowerShell: Cannot bind argumentExchange 2010 PowerShell:无法绑定参数
【发布时间】:2015-11-17 13:32:39
【问题描述】:

我正在尝试从我们的 Exchange 服务器中的所有邮箱中删除孤立的用户对象。

当我执行这个命令时:

get-mailboxpermission * | where {$_.User -like "S-1-5-21*"} | foreach {$_.Identity.Name}

它正确地返回一个列表,其中包含所有仍设置了孤立用户帐户权限的邮箱。

但是,当我尝试通过这样做来删除它们时:

get-mailboxpermission * | where {$_.User -like "S-1-5-21*"} | remove-mailboxpermission -identity $_.Identity.Name -user $_.User -accessrights $_.AccessRights -deny:$_.Deny

它返回此错误:

Cannot bind argument to parameter 'Identity' because it is null.
+ CategoryInfo          : InvalidData: (:) [Remove-MailboxPermission], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-MailboxPermission

我做错了什么?

感谢您的帮助。

【问题讨论】:

    标签: powershell exchange-server-2010


    【解决方案1】:

    $_ 不行,你需要将Remove-MailboxPermission 语句包装在ForEach-Object {} 中:

    Get-MailboxPermission * | Where-Object {$_.User -like "S-1-5-21*"} | ForEach-Object {
      Remove-MailboxPermission -Identity $_.Identity.Name -User $_.User -AccessRights $_.AccessRights -Deny:$_.Deny
    }
    

    由于 Exchange 似乎不太喜欢嵌套管道,您可以简单地完全放弃参数参数(Remove-MailboxPermission 将自动绑定来自管道的权限):

    Get-MailboxPermission * | Where-Object {$_.User -like "S-1-5-21*"} | Remove-MailboxPermission
    

    【讨论】:

    • 我已经试过这个并且得到了错误Pipelines cannot be executed concurrentlyGet-MailboxPermissionRemove-MailboxPermission 旨在从彼此获取管道输入,因此无需使用 ForEachsee this link
    • @mariu5 我的错。您是否有理由使用Remove-MailboxPermission 指定所有这些参数? Get-MailboxPermission|Remove-MailboxPermission 应该足够了
    • 成功了!我认为您必须指定确切的权限才能将其删除,但显然,这不是必需的。谢谢你的帮助。如果您编辑您的答案,如果您愿意,我可以将其标记为解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多