Exchange Powershell

Powershell – Shared Mailbox remove Rights for a User

Oftmals werden Benutzer direkt auf Shared Mailboxen für “Full Access” berechtigt. Die direkte Berechtigung hat den Vorteil, das die Shared Mailbox beim User nach einer gewissen Zeit automatisch in Outlook ersichtlich wird. Man muss die Shared Mailbox nicht manuell verbinden. Eine zentrale Übersicht welcher User auf welche Shared Mailbox berechtigt ist, gibt es nicht Out of the Box. Gerade wenn ein User seine Funktion wechselt kann es sein, das Zugriffe auf die Shared Mailbox entzogen werden muss.

Via folgendem Powershell script kann ein User ausgewählt werden. Danach wird geprüft auf welchen Shared Mailboxen der User Berechtigt ist. Aus der Liste können die Shared Mailboxen selektiert werden, von welchen die Berechtigungen entfernt werden sollen. Es wird geprüft ob auf den Mailboxen auch Send-As rechte vergeben sind, wenn ja, werden diese auch entfernt.

Angepasst werden muss nur die $searchbase variable. Sie gibt an, in welcher OU die User ausgelesen werden sollen. Powershell Module für Exchange Online muss installiert sein.

Wie bei allen Scripts, Verwendung nach eigenem Ermessen und auf eigene Verantwortung!

# generate a list of all shared mailboxes and check if a specific user has access permissions
# select the shared mailboxes from which user access permissons should be removed (as well as send-as rights if present for the user)
# V 1.0 02.08.2019

# specify Searchbase
  $searchbase = "OU=UserOU,DC=domain,DC=local"

# Import needed Module an and Prefix "O365" because on prem and Exchange Online Modules are loded in the same ps session
  Write-Host "Import Exchange Online Powershell Module - You need to enter your cloud admin credentials" -ForegroundColor Green
  Import-Module -DisableNameChecking $((Get-ChildItem -Path $($env:LOCALAPPDATA+"\Apps\2.0\") -Filter Microsoft.Exchange.Management.ExoPowershellModule.dll -Recurse ).FullName|?{$_ -notmatch "_none_"}|select -First 1)
  $EXOSession = New-ExoPSSession
  Import-PSSession -DisableNameChecking $EXOSession -Prefix O365
  
  # Let select user for which you want to check shared mailbox permissions
  Write-Host "select user for which you want to check shared mailbox permissions - Select only one User" -ForegroundColor Green
  start-sleep 2
  $user = Get-ADUser -Filter * -SearchBase $searchbase -Properties EmailAddress | where {$_.EmailAddress -ne $null} | Out-GridView -PassThru
  $username = $user.Name

  # create a list of all Shared Mailboxes
  $sharedmbx = Get-O365Mailbox -RecipientTypeDetails SharedMailbox
  
  # generate a list of all Shared Mailboxes on which selected user has Permissions  
  Write-Host "Generate a List with all Shared Mailboxes for which $username has access. This can take some time.... Coffee Time? ;-)" -ForegroundColor Green
  $check = $sharedmbx | Get-O365MailboxPermission | where {$_.User -eq $user.EmailAddress} 
  
  Write-Host "Select Shared Mailbox from which you want to remove User $username access rights" -ForegroundColor Green
  start-sleep 3

  $sharedselected = $check | Out-GridView -PassThru
   Write-Host "Removing Access right and if present, also Send-As Rights for user $username from selected Shared Maibloxes...."
  foreach ($selected in $sharedselected) {
   # Remove Access Rights
    Remove-O365MailboxPermission -Identity $selected.Identity -User $user.EmailAddress -AccessRights $selected.accessrights -confirm:$true
    
   # check for Send-As Rights and remove as well
     $sendascheck = Get-O365RecipientPermission -Identity $selected.Identity -Trustee $User.EmailAddress
     if ($sendascheck.Trustee -eq $user.EmailAddress) {
      Remove-O365RecipientPermission -Identity $selected.Identity -Trustee $user.EmailAddress -AccessRights $sendascheck.AccessRights -confirm:$true
     }

  }
  
    Write-Host "Generate a list with shared mailboxes for which User $username has access now. This can take some time...." -ForegroundColor Green
    $sharedmbx | Get-O365MailboxPermission | where {$_.User -eq $user.EmailAddress} 


  Read-Host "Finished.... Press Enter to close this window..."