Get Calendar Permission Report

Upgraded the script to use REST cmdlets and added CBA support
This commit is contained in:
AdminDroid 2024-10-14 15:33:12 +05:30
parent b6f95438dd
commit b93516b6a2

View File

@ -1,8 +1,9 @@
<# <#
============================================================================================= =============================================================================================
Name: Export Office 365 mailbox calendar permission Report Name: Export calendar permission Report for Exchange Online Mailboxes
Version: 2.0
Website: o365reports.com Website: o365reports.com
Script Highlights: Script Highlights:
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
@ -19,6 +20,15 @@ Script Highlights:
11. The script is scheduler-friendly. I.e., Credential can be passed as a parameter instead of saving inside the script. 11. The script is scheduler-friendly. I.e., Credential can be passed as a parameter instead of saving inside the script.
For detailed Script execution: https://o365reports.com/2021/11/02/get-calendar-permissions-report-for-office365-mailboxes-powershell For detailed Script execution: https://o365reports.com/2021/11/02/get-calendar-permissions-report-for-office365-mailboxes-powershell
Change Log
~~~~~~~~~~
V1.0 (Nov 02, 2021) - File created
V1.1 (Sep 28, 2023) - Minor changes
V2.0 (Oct 14, 2024) - Updated the script to use REST based cmdlets and added certificate-based authentication support to enhance scheduling capability
============================================================================================ ============================================================================================
#> #>
param ( param (
@ -28,16 +38,19 @@ param (
[String] $DisplayAllCalendarsSharedTo, [String] $DisplayAllCalendarsSharedTo,
[Switch] $DefaultCalendarPermissions, [Switch] $DefaultCalendarPermissions,
[Switch] $ExternalUsersCalendarPermissions, [Switch] $ExternalUsersCalendarPermissions,
[String] $CSVIdentityFile [String] $CSVIdentityFile,
[string]$Organization,
[string]$ClientId,
[string]$CertificateThumbprint
) )
Function Connect_Exo Function Connect_Exo
{ {
#Check for EXO v2 module inatallation #Check for EXO module inatallation
$Module = Get-Module ExchangeOnlineManagement -ListAvailable $Module = Get-Module ExchangeOnlineManagement -ListAvailable
if($Module.count -eq 0) if($Module.count -eq 0)
{ {
Write-Host Exchange Online PowerShell V2 module is not available -ForegroundColor yellow Write-Host Exchange Online PowerShell module is not available -ForegroundColor yellow
$Confirm= Read-Host Are you sure you want to install module? [Y] Yes [N] No $Confirm= Read-Host Are you sure you want to install module? [Y] Yes [N] No
if($Confirm -match "[yY]") if($Confirm -match "[yY]")
{ {
@ -46,7 +59,7 @@ Function Connect_Exo
} }
else else
{ {
Write-Host EXO V2 module is required to connect Exchange Online.Please install module using Install-Module ExchangeOnlineManagement cmdlet. Write-Host EXO module is required to connect Exchange Online.Please install module using Install-Module ExchangeOnlineManagement cmdlet.
Exit Exit
} }
} }
@ -56,14 +69,19 @@ Function Connect_Exo
{ {
$SecuredPassword = ConvertTo-SecureString -AsPlainText $Password -Force $SecuredPassword = ConvertTo-SecureString -AsPlainText $Password -Force
$Credential = New-Object System.Management.Automation.PSCredential $UserName,$SecuredPassword $Credential = New-Object System.Management.Automation.PSCredential $UserName,$SecuredPassword
Connect-ExchangeOnline -Credential $Credential Connect-ExchangeOnline -Credential $Credential -ShowBanner:$false
}
elseif($Organization -ne "" -and $ClientId -ne "" -and $CertificateThumbprint -ne "")
{
Connect-ExchangeOnline -AppId $ClientId -CertificateThumbprint $CertificateThumbprint -Organization $Organization -ShowBanner:$false
} }
else else
{ {
Connect-ExchangeOnline Connect-ExchangeOnline -ShowBanner:$false
} }
} }
Function OutputFile_Declaration Function OutputFile_Declaration
{ {
if ($DisplayAllCalendarsSharedTo -ne "") if ($DisplayAllCalendarsSharedTo -ne "")
@ -96,7 +114,7 @@ Function RetrieveMBs
$IdentityList = Import-Csv -Header "IdentityValue" $CSVIdentityFile $IdentityList = Import-Csv -Header "IdentityValue" $CSVIdentityFile
foreach ($Identity in $IdentityList) { foreach ($Identity in $IdentityList) {
$CurrIdentity = $Identity.IdentityValue $CurrIdentity = $Identity.IdentityValue
$CurrUserData = Get-Mailbox -identity $currIdentity -ErrorAction SilentlyContinue $CurrUserData = Get-EXOMailbox -identity $currIdentity -ErrorAction SilentlyContinue
if ($null -eq $CurrUserData) if ($null -eq $CurrUserData)
{ {
Write-Host $currIdentity mailbox is not found/invalid. Write-Host $currIdentity mailbox is not found/invalid.
@ -109,7 +127,7 @@ Function RetrieveMBs
} }
else else
{ {
Get-Mailbox -ResultSize Unlimited | ForEach-Object { Get-EXOMailbox -ResultSize Unlimited | ForEach-Object {
$CurrUserData = $_ $CurrUserData = $_
GetCalendars GetCalendars
} }
@ -122,7 +140,7 @@ Function GetCalendars
$EmailAddress = $CurrUserData.PrimarySmtpAddress $EmailAddress = $CurrUserData.PrimarySmtpAddress
$global:DisplayName=$CurrUserData.DisplayName $global:DisplayName=$CurrUserData.DisplayName
$CalendarFolders=@() $CalendarFolders=@()
$CalendarStats = Get-MailboxFolderStatistics -Identity $EmailAddress -FolderScope Calendar $CalendarStats = Get-EXOMailboxFolderStatistics -Identity $EmailAddress -FolderScope Calendar
#Processing the calandar folder path #Processing the calandar folder path
ForEach($LiveCalendarFolder in $CalendarStats) ForEach($LiveCalendarFolder in $CalendarStats)
@ -155,7 +173,7 @@ Function RetrieveCalendarPermissions
{ {
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1 $CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
Write-Progress "Checking calendar permission in: $CalendarFolder" "Processed mailbox count: $global:MailboxCount" Write-Progress "Checking calendar permission in: $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
$CurrCalendarData = Get-MailboxFolderPermission -Identity $CalendarFolder -User $CurrMailboxData.PrimarySmtpAddress -ErrorAction SilentlyContinue $CurrCalendarData = Get-EXOMailboxFolderPermission -Identity $CalendarFolder -User $CurrMailboxData.PrimarySmtpAddress -ErrorAction SilentlyContinue
if ($null -ne $CurrCalendarData) if ($null -ne $CurrCalendarData)
{ {
SaveCalendarPermissionsData SaveCalendarPermissionsData
@ -170,7 +188,7 @@ Function RetrieveCalendarPermissions
{ {
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1 $CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
Write-Progress "Checking calendar permission in: $CalendarFolder" "Processed mailbox count: $global:MailboxCount" Write-Progress "Checking calendar permission in: $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
Get-MailboxFolderPermission -Identity $CalendarFolder | foreach { Get-EXOMailboxFolderPermission -Identity $CalendarFolder | foreach {
$CurrCalendarData=$_ $CurrCalendarData=$_
SaveCalendarPermissionsData SaveCalendarPermissionsData
} }
@ -185,7 +203,7 @@ Function RetrieveCalendarPermissions
{ {
Write-Progress "Checking default calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount" Write-Progress "Checking default calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1 $CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
$CurrCalendarData= Get-MailboxFolderPermission -Identity $CalendarFolder | where-Object { $_.User.ToString() -eq "Default" } #| foreach-object { $CurrCalendarData= Get-EXOMailboxFolderPermission -Identity $CalendarFolder | where-Object { $_.User.ToString() -eq "Default" } #| foreach-object {
SaveCalendarPermissionsData SaveCalendarPermissionsData
} }
} }
@ -198,7 +216,7 @@ Function RetrieveCalendarPermissions
{ {
Write-Progress "Checking default calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount" Write-Progress "Checking default calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1 $CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
Get-MailboxFolderPermission -Identity $CalendarFolder | where-Object { $_.User.DisplayName.StartsWith("ExchangePublishedUser.") } | foreach-object { Get-EXOMailboxFolderPermission -Identity $CalendarFolder | where-Object { $_.User.DisplayName.StartsWith("ExchangePublishedUser.") } | foreach-object {
$CurrCalendarData=$_ $CurrCalendarData=$_
SaveCalendarPermissionsData SaveCalendarPermissionsData
} }
@ -212,7 +230,7 @@ Function RetrieveCalendarPermissions
{ {
Write-Progress "Checking calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount" Write-Progress "Checking calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1 $CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
Get-MailboxFolderPermission -Identity $CalendarFolder | where-Object { ($_.User.ToString() -ne "Default" -and $_.User.ToString() -ne "Anonymous") } | foreach-object { Get-EXOMailboxFolderPermission -Identity $CalendarFolder | where-Object { ($_.User.ToString() -ne "Default" -and $_.User.ToString() -ne "Anonymous") } | foreach-object {
$CurrCalendarData=$_ $CurrCalendarData=$_
SaveCalendarPermissionsData SaveCalendarPermissionsData
} }
@ -291,7 +309,7 @@ $global:MailboxCount = 0
$global:ReportSize = 0 $global:ReportSize = 0
if ($DisplayAllCalendarsSharedTo -ne "") if ($DisplayAllCalendarsSharedTo -ne "")
{ {
$CurrMailboxData = Get-Mailbox -Identity $DisplayAllCalendarsSharedTo -ErrorAction SilentlyContinue $CurrMailboxData = Get-EXOMailbox -Identity $DisplayAllCalendarsSharedTo -ErrorAction SilentlyContinue
if ($CurrMailboxData -eq $null) if ($CurrMailboxData -eq $null)
{ {
Write-Host "Given email address is invalid. Exiting from execution." -ForegroundColor Magenta Write-Host "Given email address is invalid. Exiting from execution." -ForegroundColor Magenta