111 lines
3.8 KiB
PowerShell
111 lines
3.8 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Configures calendar permissions and processing settings on the specified room mailboxes.
|
|
|
|
.DESCRIPTION
|
|
For each mailbox identity supplied (directly or via the pipeline):
|
|
- Grants the Default user LimitedDetails access on the mailbox calendar
|
|
folder.
|
|
- Configures calendar processing so the organizer's name is added to the
|
|
meeting subject, and neither comments nor the subject are stripped
|
|
from booking requests.
|
|
|
|
Requires an existing Exchange Online session (Connect-ExchangeOnline) -
|
|
this script does not connect or disconnect itself.
|
|
|
|
.PARAMETER Identity
|
|
One or more room mailbox identities (UPN, email address, or Exchange
|
|
Identity) to configure. Accepts pipeline input, e.g. piped straight from
|
|
Get-Mailbox.
|
|
|
|
.PARAMETER CalendarFolderName
|
|
Name of the mailbox's Calendar folder, in the mailbox's own language.
|
|
Defaults to "Calendar" (English). Use this for non-English mailboxes, e.g.
|
|
"Kalendar" for Czech. The actual name for a given mailbox can be listed
|
|
with:
|
|
Get-MailboxFolderStatistics -Identity <Identity> -FolderScope Calendar | Where-Object { $_.FolderType -eq 'Calendar' } | Select-Object Name
|
|
|
|
.EXAMPLE
|
|
.\Set-RoomMailboxPermission.ps1 -Identity room1@contoso.com
|
|
Configures a single room mailbox.
|
|
|
|
.EXAMPLE
|
|
Get-Mailbox -ResultSize Unlimited | Where-Object { $_.ResourceType -eq 'Room' } | .\Set-RoomMailboxPermission.ps1
|
|
Configures every room mailbox in the tenant, piped in from Get-Mailbox.
|
|
|
|
.EXAMPLE
|
|
Get-Mailbox -ResultSize Unlimited | Where-Object { $_.ResourceType -eq 'Room' } | .\Set-RoomMailboxPermission.ps1 -WhatIf
|
|
Shows which room mailboxes would be changed without applying anything.
|
|
|
|
.EXAMPLE
|
|
.\Set-RoomMailboxPermission.ps1 -Identity room-cz@contoso.com -CalendarFolderName 'Kalendar'
|
|
Configures a Czech-locale room mailbox whose Calendar folder is named "Kalendar".
|
|
|
|
.NOTES
|
|
Author: Petr Stepan
|
|
Created: 2026-07-21
|
|
Version: 1.0.0
|
|
Changelog:
|
|
1.0.0 - Initial version
|
|
|
|
Requires the ExchangeOnlineManagement module, an active Exchange Online
|
|
session, and an account with permission to manage mailbox folder
|
|
permissions and calendar processing.
|
|
#>
|
|
|
|
#Requires -Modules ExchangeOnlineManagement
|
|
[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Medium')]
|
|
param (
|
|
[Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'Room mailbox identity (UPN, email, or Exchange Identity) to configure.')]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string[]]
|
|
$Identity,
|
|
|
|
[Parameter(Mandatory = $false, HelpMessage = 'Name of the Calendar folder in the mailbox locale.')]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string]
|
|
$CalendarFolderName = 'Calendar'
|
|
)
|
|
|
|
begin {
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$processedCount = 0
|
|
$failedCount = 0
|
|
}
|
|
|
|
process {
|
|
foreach ($id in $Identity) {
|
|
$processedCount++
|
|
|
|
if ($PSCmdlet.ShouldProcess($id, "Set calendar folder permission (LimitedDetails) and calendar processing settings")) {
|
|
try {
|
|
Set-MailboxFolderPermission -Identity "$($id):\$CalendarFolderName" -User Default -AccessRights LimitedDetails -ErrorAction Stop
|
|
|
|
Set-CalendarProcessing -Identity $id -AddOrganizerToSubject $true -DeleteComments $false -DeleteSubject $false -ErrorAction Stop
|
|
|
|
Write-Verbose "Configured '$id' successfully."
|
|
}
|
|
catch {
|
|
Write-Warning "Failed to configure '$id': $_"
|
|
$failedCount++
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
end {
|
|
if ($processedCount -eq 0) {
|
|
Write-Warning "No mailboxes were provided."
|
|
exit 0
|
|
}
|
|
|
|
if ($failedCount -gt 0) {
|
|
Write-Warning "$failedCount of $processedCount mailboxes failed to configure."
|
|
exit 1
|
|
}
|
|
|
|
exit 0
|
|
}
|