Below a sample report generated by the powershell script below.
Sample report:
Mailbox | ForwardTo | RedirectTo |
test user1 | c1@yahoo.com | n/a |
test user2 | c2@gmail.com | n/a |
test user3 |
c3@hotmail.com | myid@yahoo.com |
The script will also show its progress, as its run, like below.
1 : Getting Rules For User Mailbox: user1 2 : Getting Rules For User Mailbox: user2 3 : Getting Rules For User Mailbox: user3 4 : Getting Rules For User Mailbox: user4 5 : Getting Rules For User Mailbox: user5
This script has been used in Office 365 environment to generate the report. If you wish to run it on an on-premises Exchange environment, then I would suggest testing it first on a small batch of inboxes to confirm that its working as expected.
Please find the full script code below.
#==================================================== # Get-InboxRule-External-and-RedirectTo.ps1 # Author: Sunil Chauhan # Email:Sunilkms@gmail.com # website:sunil-Chauhan.blogspot.com # This scripts gets all the forwarding and redirectTo Rules and ` # Create a Report in a presentable format. #==================================================== #Edit report Name Below. $reportName="Forwarding-Rules-Report.csv" #Getting All Mailbox in the Environment Write-host "Getting All Mailboxes.." $AllMailboxes = Get-Mailbox -resultSize unlimited #if you Just need to Target User Mailbox only untag the below like and tag the one above. #$AllMailboxes = Get-Mailbox -RecipientTypeDetails userMailbox -ResultSize unlimited #Placeholder for Rule Collection $AllRules = @() #counter $c=0 #Loop through each mailbox to fetch the Inbox Rules foreach ($mbx in $allMailboxes) { $c++ Write-host "$C : Getting Rules For User Mailbox:" $mbx.Alias $mbxRules= Get-InboxRule -Mailbox $mbx.Alias $AllRules+=$MbxRules } #Filtering Forwarding Rules $Rules = $AllRules | ? {$_.Description -match "@" -and $_.ForwardTo -ne $null -or $_.RedirectTo -ne $null} #Placeholder for saving Report Data $RulesDATA=@() #Run Through Each Rule to prelare Report foreach ($rule in $Rules) { #Getting Data from RedirectTo Rule if ($rule.ForwardTo) { if (($rule.ForwardTo).Count -gt 1) { foreach ($entry in $rule.ForwardTo) { if ($entry -match "@") { $RulesD= New-Object -TypeName PSObject $RulesD| Add-Member -MemberType NoteProperty -Name Mailbox -Value $rule.MailboxOwnerID $RulesD| Add-Member -MemberType NoteProperty -Name ForwardTo -Value $($entry | % {$($_.split("[")[0]).Replace('"',"")}) $RulesD| Add-Member -MemberType NoteProperty -Name RedirectTo -Value "n/a" $RulesDATA+=$rulesD } } } Else{ if ($rule.ForwardTo -match "@") { $RulesD= New-Object -TypeName PSObject $RulesD| Add-Member -MemberType NoteProperty -Name Mailbox -Value $rule.MailboxOwnerID $RulesD| Add-Member -MemberType NoteProperty -Name ForwardTo -Value $($rule.ForwardTo | % {$($_.split("[")[0]).Replace('"',"")}) $RulesD| Add-Member -MemberType NoteProperty -Name RedirectTo -Value "n/a" $RulesDATA+=$rulesD } } } #Getting Data from RedirectTo Rule if ($rule.RedirectTo) { if (($rule.RedirectTo).Count -gt 1) { foreach ($entry in $rule.RedirectTo) { if ($entry -match "@") { $RulesD= New-Object -TypeName PSObject $RulesD| Add-Member -MemberType NoteProperty -Name Mailbox -Value $rule.MailboxOwnerID $RulesD| Add-Member -MemberType NoteProperty -Name ForwardTo -Value n/a $RulesD| Add-Member -MemberType NoteProperty -Name RedirectTo -Value $($entry | % {$($_.split("[")[0]).Replace('"',"")}) $RulesDATA+=$rulesD } } } Else{ if ($rule.RedirectTo -match "@") { $RulesD= New-Object -TypeName PSObject $RulesD| Add-Member -MemberType NoteProperty -Name Mailbox -Value $rule.MailboxOwnerID $RulesD| Add-Member -MemberType NoteProperty -Name ForwardTo -Value "N/A" $RulesD| Add-Member -MemberType NoteProperty -Name RedirectTo -Value $($rule.RedirectTo | % {$($_.split("[")[0]).Replace('"',"")}) $RulesDATA+=$rulesD } } } } #exporting report Data to Csv File $RulesDATA | Export-Csv $reportName -notype
Note: Please make sure to test the PowerShell script for a small number of mailboxes to confirm if it's generated the expected report.
Please feel free to leave your feedback or issues regarding the script in the comments section I will try to resolve them.
Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.
Comments (5)
Commented:
Does this means that if the Outlook client is closed, the result can still be displayed or it will be skipped ?
Author
Commented:Commented:
Thank you for the rule . we are testing this in our environment. Do you think if you have any script to display the full access permission for all the mailboxes
Author
Commented:http://www.sunilchauhan.info/2016/05/get-full-mailbox-permission-report.html
Commented: