2015-11-17 6 views
1

J'essaie de supprimer les objets utilisateur orphelins de toutes les boîtes aux lettres de notre serveur Exchange.Exchange 2010 PowerShell: Impossible de lier l'argument

Quand j'exécuter cette commande:

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

Il renvoie correctement une liste avec toutes les boîtes aux lettres qui ont toujours orphelins des autorisations de compte utilisateur sont définis sur eux.

Cependant, lorsque je tente de les supprimer en faisant ceci:

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

Il retourne cette erreur:

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

Qu'est-ce que je fais mal?

Merci pour toute aide.

Répondre

3

$_ ne fonctionne pas comme ça, vous avez besoin d'envelopper la déclaration Remove-MailboxPermission dans 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 
} 

Comme Exchange ne semble pas que les pipelines imbriqués beaucoup, vous pourriez simplement supprimer le paramètre arguments tout à fait (Remove-MailboxPermission se lient automatiquement les autorisations du pipeline):

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

Je l'ai déjà essayé et obtenu l'erreur 'pipelines ne peuvent pas être exécutés concurrently'. 'Get-MailboxPermission' et' Remove-MailboxPermission' sont conçus pour prendre l'entrée de pipeline les uns des autres de sorte qu'il n'est pas nécessaire d'utiliser 'ForEach'. [voir ce lien] (http://mikepfeiffer.net/2010/02/exchange-management-shell-error-pipelines-cannot-be-executed-concurrently/) – mariu5

+1

@ mariu5 Ma mauvaise. Y at-il une raison pour laquelle vous spécifiez tous ces paramètres avec 'Remove-MailboxPermission'? 'Get-MailboxPermission | Remove-MailboxPermission' devrait suffire –

+0

Cela a fait l'affaire! Je pensais que vous auriez à spécifier la permission exacte afin de l'enlever mais apparemment, ce n'est pas nécessaire. Merci de votre aide. Si vous modifiez votre réponse, je pourrais la marquer comme une solution si vous le souhaitez. – mariu5