mirror of
https://github.com/admindroid-community/powershell-scripts.git
synced 2025-12-17 16:35:19 +00:00
Get Mailbox Calendar Permission Report
Get Mailbox Calendar Permission Report
This commit is contained in:
parent
a5bc88c4fe
commit
13780f12c7
305
Get Calendar Permission Report/GetMailboxCalendarPermissions.ps1
Normal file
305
Get Calendar Permission Report/GetMailboxCalendarPermissions.ps1
Normal file
@ -0,0 +1,305 @@
|
||||
param (
|
||||
[string] $UserName = $null,
|
||||
[string] $Password = $null,
|
||||
[Switch] $ShowAllPermissions,
|
||||
[String] $DisplayAllCalendarsSharedTo,
|
||||
[Switch] $DefaultCalendarPermissions,
|
||||
[Switch] $ExternalUsersCalendarPermissions,
|
||||
[String] $CSVIdentityFile
|
||||
)
|
||||
|
||||
Function Connect_Exo
|
||||
{
|
||||
#Check for EXO v2 module inatallation
|
||||
$Module = Get-Module ExchangeOnlineManagement -ListAvailable
|
||||
if($Module.count -eq 0)
|
||||
{
|
||||
Write-Host Exchange Online PowerShell V2 module is not available -ForegroundColor yellow
|
||||
$Confirm= Read-Host Are you sure you want to install module? [Y] Yes [N] No
|
||||
if($Confirm -match "[yY]")
|
||||
{
|
||||
Write-host "Installing Exchange Online PowerShell module"
|
||||
Install-Module ExchangeOnlineManagement -Repository PSGallery -AllowClobber -Force
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host EXO V2 module is required to connect Exchange Online.Please install module using Install-Module ExchangeOnlineManagement cmdlet.
|
||||
Exit
|
||||
}
|
||||
}
|
||||
Write-Host Connecting to Exchange Online...
|
||||
#Storing credential in script for scheduling purpose/ Passing credential as parameter - Authentication using non-MFA account
|
||||
if(($UserName -ne "") -and ($Password -ne ""))
|
||||
{
|
||||
$SecuredPassword = ConvertTo-SecureString -AsPlainText $Password -Force
|
||||
$Credential = New-Object System.Management.Automation.PSCredential $UserName,$SecuredPassword
|
||||
Connect-ExchangeOnline -Credential $Credential
|
||||
}
|
||||
else
|
||||
{
|
||||
Connect-ExchangeOnline
|
||||
}
|
||||
}
|
||||
|
||||
Function OutputFile_Declaration
|
||||
{
|
||||
if ($DisplayAllCalendarsSharedTo -ne "")
|
||||
{
|
||||
$global:ExportCSVFileName = "CalendarsSharedTo"+ $DisplayAllCalendarsSharedTo+"_" + ((Get-Date -format "MMM-dd hh-mm-ss tt").ToString()) + ".csv"
|
||||
}
|
||||
elseif ($ShowAllPermissions.IsPresent)
|
||||
{
|
||||
$global:ExportCSVFileName = "AllCalendarPermissionReport-" + ((Get-Date -format "MMM-dd hh-mm-ss tt").ToString()) + ".csv"
|
||||
}
|
||||
elseif ($DefaultCalendarPermissions.IsPresent)
|
||||
{
|
||||
$global:ExportCSVFileName = "DefaultCalendarPermissionsReport-" + ((Get-Date -format "MMM-dd hh-mm-ss tt").ToString()) + ".csv"
|
||||
}
|
||||
elseif ($ExternalUsersCalendarPermissions.IsPresent)
|
||||
{
|
||||
$global:ExportCSVFileName = "SharedCalendarsWithExternalUsersReport-" + ((Get-Date -format "MMM-dd hh-mm-ss tt").ToString()) + ".csv"
|
||||
}
|
||||
else
|
||||
{
|
||||
$global:ExportCSVFileName = "CalendarPermissionsReport-" + ((Get-Date -format "MMM-dd hh-mm-ss tt").ToString()) + ".csv"
|
||||
}
|
||||
}
|
||||
|
||||
#Checks the user input file availability. Then, processes the mailbox
|
||||
Function RetrieveMBs
|
||||
{
|
||||
if ([string]$CSVIdentityFile -ne "")
|
||||
{
|
||||
$IdentityList = Import-Csv -Header "IdentityValue" $CSVIdentityFile
|
||||
foreach ($Identity in $IdentityList) {
|
||||
$CurrIdentity = $Identity.IdentityValue
|
||||
$CurrUserData = Get-Mailbox -identity $currIdentity -ErrorAction SilentlyContinue
|
||||
if ($null -eq $CurrUserData)
|
||||
{
|
||||
Write-Host $currIdentity mailbox is not found/invalid.
|
||||
}
|
||||
else
|
||||
{
|
||||
GetCalendars
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Get-Mailbox -ResultSize Unlimited | ForEach-Object {
|
||||
$CurrUserData = $_
|
||||
GetCalendars
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Function GetCalendars
|
||||
{
|
||||
$global:MailboxCount = $global:MailboxCount+1
|
||||
$EmailAddress = $CurrUserData.PrimarySmtpAddress
|
||||
$global:DisplayName=$CurrUserData.DisplayName
|
||||
$CalendarFolders=@()
|
||||
$CalendarStats = Get-MailboxFolderStatistics -Identity $EmailAddress -FolderScope Calendar
|
||||
|
||||
#Processing the calandar folder path
|
||||
ForEach($LiveCalendarFolder in $CalendarStats)
|
||||
{
|
||||
if (($LiveCalendarFolder.FolderType) -eq "Calendar")
|
||||
{
|
||||
$CurrCalendarFolder = $EmailAddress + ":\Calendar"
|
||||
}
|
||||
else
|
||||
{
|
||||
$CurrCalendarFolder = $EmailAddress + ":\Calendar\" + $LiveCalendarFolder.Name
|
||||
}
|
||||
$CalendarFolders += $CurrCalendarFolder
|
||||
|
||||
}
|
||||
RetrieveCalendarPermissions
|
||||
}
|
||||
|
||||
#Processes the mailbox calendars and retrieves the calendar permissions
|
||||
Function RetrieveCalendarPermissions
|
||||
{
|
||||
#Determine the usecase
|
||||
|
||||
#Processing the DisplayAllCalendarsSharedTo switch param
|
||||
if ($DisplayAllCalendarsSharedTo -ne "")
|
||||
{
|
||||
$DisplayName=$CurrUserData.DisplayName
|
||||
$Flag = "DisplayAllCalendarsSharedTo"
|
||||
foreach($CalendarFolder in $CalendarFolders)
|
||||
{
|
||||
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
|
||||
Write-Progress "Checking calendar permission in: $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
|
||||
$CurrCalendarData = Get-MailboxFolderPermission -Identity $CalendarFolder -User $CurrMailboxData.PrimarySmtpAddress -ErrorAction SilentlyContinue
|
||||
if ($null -ne $CurrCalendarData)
|
||||
{
|
||||
SaveCalendarPermissionsData
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Processing the ShowAllPermissions switch param
|
||||
elseif ($ShowAllPermissions.IsPresent)
|
||||
{
|
||||
foreach($CalendarFolder in $CalendarFolders)
|
||||
{
|
||||
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
|
||||
Write-Progress "Checking calendar permission in: $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
|
||||
Get-MailboxFolderPermission -Identity $CalendarFolder | foreach {
|
||||
$CurrCalendarData=$_
|
||||
SaveCalendarPermissionsData
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Processing the DefaultCalendarPermissions switch param
|
||||
elseif ($DefaultCalendarPermissions.IsPresent)
|
||||
{
|
||||
$Flag = "DefaultUserCalendar"
|
||||
foreach($CalendarFolder in $CalendarFolders)
|
||||
{
|
||||
Write-Progress "Checking default calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
|
||||
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
|
||||
$CurrCalendarData= Get-MailboxFolderPermission -Identity $CalendarFolder | where-Object { $_.User.ToString() -eq "Default" } #| foreach-object {
|
||||
SaveCalendarPermissionsData
|
||||
}
|
||||
}
|
||||
|
||||
#Processing the ExternalUsersCalendarPermissions switch param
|
||||
elseif ($ExternalUsersCalendarPermissions.IsPresent)
|
||||
{
|
||||
$Flag = "ExternalUserCalendarSharing"
|
||||
foreach($CalendarFolder in $CalendarFolders)
|
||||
{
|
||||
Write-Progress "Checking default calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
|
||||
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
|
||||
Get-MailboxFolderPermission -Identity $CalendarFolder | where-Object { $_.User.DisplayName.StartsWith("ExchangePublishedUser.") } | foreach-object {
|
||||
$CurrCalendarData=$_
|
||||
SaveCalendarPermissionsData
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Processing default report
|
||||
else
|
||||
{
|
||||
foreach($CalendarFolder in $CalendarFolders)
|
||||
{
|
||||
Write-Progress "Checking calendar permission for $CalendarFolder" "Processed mailbox count: $global:MailboxCount"
|
||||
$CalendarName=$CalendarFolder -split "\\" | Select-Object -Last 1
|
||||
Get-MailboxFolderPermission -Identity $CalendarFolder | where-Object { ($_.User.ToString() -ne "Default" -and $_.User.ToString() -ne "Anonymous") } | foreach-object {
|
||||
$CurrCalendarData=$_
|
||||
SaveCalendarPermissionsData
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Function SaveCalendarPermissionsData
|
||||
{
|
||||
$Identity = $CurrUserData.Identity
|
||||
$global:ReportSize = $global:ReportSize + 1
|
||||
$MailboxType = $CurrUserData.RecipientTypeDetails
|
||||
$CalendarName = $CalendarName
|
||||
$SharedToMB=$CurrCalendarData.User.DisplayName
|
||||
if ($SharedToMB.StartsWith("ExchangePublishedUser."))
|
||||
{
|
||||
$AllowedUser = $SharedToMB -replace ("ExchangePublishedUser.", "")
|
||||
$UserType = "External/Unauthorized"
|
||||
}
|
||||
else
|
||||
{
|
||||
$AllowedUser = $SharedToMB
|
||||
$UserType = "Member"
|
||||
}
|
||||
$AccessRights = $CurrCalendarData.AccessRights -join ","
|
||||
if ($Empty -ne ($CurrCalendarData.SharingPermissionFlags))
|
||||
{
|
||||
$PermissionFlag = $CurrCalendarData.SharingPermissionFlags -join ","
|
||||
}
|
||||
else
|
||||
{
|
||||
$PermissionFlag = "-"
|
||||
}
|
||||
ExportCalendarPermissionData
|
||||
}
|
||||
|
||||
#Exporting all the processed data to the appropriate switch params of user choice
|
||||
Function ExportCalendarPermissionData
|
||||
{
|
||||
$ExportResult = @{
|
||||
'Mailbox Name' = $Identity;
|
||||
'Email Address' = $EmailAddress;
|
||||
'Mailbox Type' = $MailboxType;
|
||||
'Calendar Name' = $CalendarName;
|
||||
'Shared To' = $AllowedUser;
|
||||
'User Type' = $UserType;
|
||||
'Access Rights' = $AccessRights;
|
||||
'Sharing Permission Flags' = $PermissionFlag;
|
||||
}
|
||||
|
||||
|
||||
$ExportResults = New-Object PSObject -Property $ExportResult
|
||||
if ($Flag -eq "DisplayAllCalendarsSharedTo")
|
||||
{
|
||||
$ExportResults | Select-object 'Mailbox Name', 'Email Address','Calendar Name', 'Access Rights','Sharing Permission Flags', 'Mailbox Type' | Export-csv -path $global:ExportCSVFileName -NoType -Append
|
||||
}
|
||||
|
||||
elseif ($Flag -eq "DefaultUserCalendar")
|
||||
{
|
||||
$ExportResults | Select-object 'Mailbox Name', 'Email Address', 'Mailbox Type', 'Calendar Name', 'Access Rights' | Export-csv -path $global:ExportCSVFileName -NoType -Append
|
||||
}
|
||||
elseif ($Flag -eq "ExternalUserCalendarSharing")
|
||||
{
|
||||
$ExportResults | Select-object 'Mailbox Name', 'Email Address', 'Calendar Name', 'Shared To' ,'Access Rights' | Export-csv -path $global:ExportCSVFileName -NoType -Append
|
||||
}
|
||||
else
|
||||
{
|
||||
$ExportResults | Select-object 'Mailbox Name', 'Email Address', 'Mailbox Type', 'Calendar Name', 'Shared To', 'Access Rights', 'Sharing Permission Flags', 'User Type' | Export-csv -path $ExportCSVFileName -NoType -Append
|
||||
}
|
||||
}
|
||||
|
||||
#Execution starts here
|
||||
Connect_Exo
|
||||
OutputFile_Declaration
|
||||
$global:MailboxCount = 0
|
||||
$global:ReportSize = 0
|
||||
if ($DisplayAllCalendarsSharedTo -ne "")
|
||||
{
|
||||
$CurrMailboxData = Get-Mailbox -Identity $DisplayAllCalendarsSharedTo -ErrorAction SilentlyContinue
|
||||
if ($CurrMailboxData -eq $null)
|
||||
{
|
||||
Write-Host "Given email address is invalid. Exiting from execution." -ForegroundColor Magenta
|
||||
return
|
||||
}
|
||||
}
|
||||
Write-Host Generating mailboxes"'" calendar permission report...
|
||||
RetrieveMBs
|
||||
|
||||
#Validates the output file availability
|
||||
if ((Test-Path -Path $ExportCSVFileName) -eq "True") {
|
||||
#Open file after code execution finishes
|
||||
Write-Host "The output file available in $global:ExportCSVFileName" -ForegroundColor Green
|
||||
Write-Host `nFor more Office 365 related PowerShell scripts, check https://o365reports.com -ForegroundColor Cyan
|
||||
write-host "Exported $global:ReportSize records to CSV."
|
||||
$prompt = New-Object -ComObject wscript.shell
|
||||
$userInput = $prompt.popup("Do you want to open output file?", 0, "Open Output File", 4)
|
||||
If ($userInput -eq 6) {
|
||||
Invoke-Item "$global:ExportCSVFileName"
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host "No data found with the specified criteria"
|
||||
}
|
||||
|
||||
#Disconneting the ExchangeOnline connection
|
||||
Disconnect-ExchangeOnline -Confirm:$false -InformationAction Ignore -ErrorAction SilentlyContinue
|
||||
Write-Host "Disconnected active ExchangeOnline session"
|
||||
|
||||
<#
|
||||
=============================================================================================
|
||||
For detailed Script execution: https://o365reports.com/2021/11/02/get-calendar-permissions-report-for-office365-mailboxes-powershell
|
||||
============================================================================================
|
||||
#>
|
||||
Loading…
x
Reference in New Issue
Block a user