Getting shared mailboxes with no delegates in Powershell

Copper Contributor

Hi,

 

I'm quite new to powershell and am just wondering if there's a way to get all of the shared mailboxes in Office 365 that haven't got any delegates on them?

 

Thanks

Salim

10 Replies
Hi!
I’m not able to write anything right now but I found maybe a little workaround script in this post here:

https://social.technet.microsoft.com/Forums/en-US/c4372940-51c6-4c72-8414-424793fd9ac0/list-shared-m...

Adam

Delegates can have a different meaning, are you referring to granting mailbox-level access (Full access) or folder-level access? For both of these scenarios you can easily use PowerShell to get a list of "undelegated" mailboxes, but the cmdlets you will have to use are a bit different.


@adam deltinger wrote:
Hi!
I’m not able to write anything right now but I found maybe a little workaround script in this post here:

https://social.technet.microsoft.com/Forums/en-US/c4372940-51c6-4c72-8414-424793fd9ac0/list-shared-m...

Adam

Hi Adam,

 

Thanks for that I'll give it a try!

I'm referring to shared mailboxes that are just sitting there with nobody having access to them whatsoever. Just need to clear out shared mailboxes that aren't being used.

Hm, for this scenario perhaps a better way will be to do a message trace instead? I mean you might have shared mailboxes that nobody can access (no permissions granted), however they might still be receiving messages, isn't thing something you want to account for?

Hi Vasil,

Yeah definitely but I don't think a message trace would be the way to go. I'm not looking to delete them before checking with the site users and that's why I'd like to see a list of shared mailboxes that are just sitting there in 365 that nobody has been delegated access to. I doubt it'd be a large number but we have too many shared mailboxes for me to go through all of them one by one.

Well, here's a quick sample of what you can do with PowerShell:

 

Get-Mailbox -RecipientTypeDetails SharedMailbox |select PrimarySmtpAddress,@{n="FullAccess";e={ (Get-MailboxPermission $_.PrimarySmtpAddress | ? {($_.User -ne "NT AUTHORITY\SELF") -and ($_.IsInherited -ne $true) -and ($_.AccessRights -match "FullAccess") -and -not ($_.User -like "S-1-5*")}).User -join "," }} |? {!$_.FullAccess}

It's a one-liner, so a bit ugly, but should get the job done. Do note that it will take a long time to run if you have a large number of mailboxes. Also it doesn't cover any folder-level permissions, if you want these included best go with a full-blown script. I have few samples posted on the TechNet Gallery, you can easily adapt them.

 

@Vasil Michev I can't get your command above to work?

It returns the PrimarySMTPAddress for accounts where there are real users with FullAccess permission

@Vasil Michev 

I don't think that would return anything that is null.

Excellent, thanks for sharing! @Vasil Michev