Skip to content

Room Mailbox Booking Configuration - Final Solution

Date: January 2026
Author: Jeff Ricica
Organization: Rudolph Libbe Group
Issue: Users unable to book conference rooms, receiving "no permission" errors


Problem Summary

Conference room mailboxes were preventing users from booking rooms, including high-visibility issues with the CEO's admin being unable to book RL Conference Room 2. Users received error messages stating "You don't have permission to book this resource" even when rooms were available.


Root Cause

Room mailboxes had incorrect booking policy settings:

  • AllBookInPolicy: False - Required users to be on a permission list
  • AddNewRequestsTentatively: True - Put requests in limbo awaiting approval
  • BookInPolicy: {} (empty) - No users were actually on the permission list

This combination meant no one had permission to book, and requests couldn't be processed automatically.


Solution

Apply Microsoft's documented standard configuration for "anyone can book" room resources.

Standard Conference Room Configuration

For regular conference rooms and Teams Rooms:

Set-CalendarProcessing -Identity "RoomEmail@rlgbuilds.com" `
    -AutomateProcessing AutoAccept `
    -AllBookInPolicy $true `
    -AllRequestOutOfPolicy $false `
    -AllRequestInPolicy $false `
    -AddNewRequestsTentatively $false `
    -ConflictPercentageAllowed 0 `
    -MaximumConflictInstances 0 `
    -DeleteSubject $false `
    -AddOrganizerToSubject $true `
    -RemovePrivateProperty $true `
    -DeleteComments $true `
    -DeleteAttachments $true

What this achieves:

  • ✅ Anyone can book the room
  • ✅ Booking conflicts are automatically prevented
  • ✅ Non-conflicting requests are auto-accepted immediately
  • ✅ Conflicting requests are auto-declined immediately
  • ✅ No delegate approval required
  • ✅ Meeting details display on Teams Room devices

PTO Tracking Room Configuration

For rooms used to track time off (CLE PTO, SMO PTO, RL Site Safety Team):

Set-CalendarProcessing -Identity "PTORoomEmail@rlgbuilds.com" `
    -AutomateProcessing AutoAccept `
    -AllBookInPolicy $true `
    -AllRequestOutOfPolicy $false `
    -AllRequestInPolicy $false `
    -AddNewRequestsTentatively $false `
    -ConflictPercentageAllowed 100 `
    -MaximumConflictInstances 1000 `
    -DeleteSubject $false `
    -AddOrganizerToSubject $true

What this achieves:

  • ✅ Multiple people can be off at the same time
  • ✅ Allows up to 1000 overlapping bookings
  • ✅ Still auto-accepts/processes immediately

Implementation Scripts

Apply to All Conference Rooms

# Get all room mailboxes
$AllRooms = Get-EXOMailbox -RecipientTypeDetails RoomMailbox -ResultSize Unlimited

# Exclude PTO tracking rooms
$PTORooms = @(
    "RLSiteSafetyTeam@rlgbuilds.com",
    "CLEPTO@RLGbuilds.com",
    "smopto@rlgbuilds.com"
)

# Configure standard conference rooms
foreach ($Room in $AllRooms) {
    # Skip PTO rooms
    if ($PTORooms -contains $Room.PrimarySmtpAddress) {
        Write-Host "Skipping PTO room: $($Room.DisplayName)" -ForegroundColor Yellow
        continue
    }

    Write-Host "Configuring: $($Room.DisplayName)" -ForegroundColor Cyan

    Set-CalendarProcessing -Identity $Room.PrimarySmtpAddress `
        -AutomateProcessing AutoAccept `
        -AllBookInPolicy $true `
        -AllRequestOutOfPolicy $false `
        -AllRequestInPolicy $false `
        -AddNewRequestsTentatively $false `
        -ConflictPercentageAllowed 0 `
        -MaximumConflictInstances 0 `
        -DeleteSubject $false `
        -AddOrganizerToSubject $true `
        -RemovePrivateProperty $true `
        -DeleteComments $true `
        -DeleteAttachments $true `
        -ErrorAction Continue
}

Write-Host "`nStandard conference rooms configured!" -ForegroundColor Green

Configure PTO Tracking Rooms

# Define PTO room email addresses
$PTORooms = @(
    "RLSiteSafetyTeam@rlgbuilds.com",
    "CLEPTO@RLGbuilds.com",
    "smopto@rlgbuilds.com"
)

# Configure PTO rooms to allow conflicts
foreach ($Room in $PTORooms) {
    Write-Host "Configuring PTO room: $Room" -ForegroundColor Cyan

    Set-CalendarProcessing -Identity $Room `
        -AutomateProcessing AutoAccept `
        -AllBookInPolicy $true `
        -AllRequestOutOfPolicy $false `
        -AllRequestInPolicy $false `
        -AddNewRequestsTentatively $false `
        -ConflictPercentageAllowed 100 `
        -MaximumConflictInstances 1000 `
        -DeleteSubject $false `
        -AddOrganizerToSubject $true `
        -ErrorAction Continue
}

Write-Host "`nPTO tracking rooms configured!" -ForegroundColor Green

Verification

Quick Check (Single Room)

Get-CalendarProcessing -Identity "RoomEmail@rlgbuilds.com" | 
    FL DisplayName,AllBookInPolicy,AllRequestOutOfPolicy,AddNewRequestsTentatively,ConflictPercentageAllowed

Expected output for standard conference room:

AllBookInPolicy           : True
AllRequestOutOfPolicy     : False
AddNewRequestsTentatively : False
ConflictPercentageAllowed : 0

Expected output for PTO tracking room:

AllBookInPolicy           : True
AllRequestOutOfPolicy     : False
AddNewRequestsTentatively : False
ConflictPercentageAllowed : 100

Comprehensive Verification (All Rooms)

# Get all room mailboxes
$AllRooms = Get-EXOMailbox -RecipientTypeDetails RoomMailbox -ResultSize Unlimited

# Define PTO rooms for different validation
$PTORooms = @(
    "RLSiteSafetyTeam@rlgbuilds.com",
    "CLEPTO@RLGbuilds.com",
    "smopto@rlgbuilds.com"
)

$Results = @()
$CorrectCount = 0
$IncorrectCount = 0

foreach ($Room in $AllRooms) {
    $CalSettings = Get-CalendarProcessing -Identity $Room.PrimarySmtpAddress

    # Determine if this is a PTO room
    $IsPTORoom = $PTORooms -contains $Room.PrimarySmtpAddress

    # Check if correctly configured based on room type
    if ($IsPTORoom) {
        $IsCorrect = (
            $CalSettings.AllBookInPolicy -eq $true -and
            $CalSettings.AllRequestOutOfPolicy -eq $false -and
            $CalSettings.AddNewRequestsTentatively -eq $false -and
            $CalSettings.ConflictPercentageAllowed -eq 100 -and
            $CalSettings.MaximumConflictInstances -eq 1000
        )
        $RoomType = "PTO Tracker"
    } else {
        $IsCorrect = (
            $CalSettings.AllBookInPolicy -eq $true -and
            $CalSettings.AllRequestOutOfPolicy -eq $false -and
            $CalSettings.AddNewRequestsTentatively -eq $false -and
            $CalSettings.ConflictPercentageAllowed -eq 0 -and
            $CalSettings.MaximumConflictInstances -eq 0
        )
        $RoomType = "Conference Room"
    }

    if ($IsCorrect) {
        $CorrectCount++
        $Status = "CORRECT"
    } else {
        $IncorrectCount++
        $Status = "NEEDS FIX"
    }

    $Results += [PSCustomObject]@{
        DisplayName               = $Room.DisplayName
        PrimarySmtpAddress        = $Room.PrimarySmtpAddress
        RoomType                  = $RoomType
        Status                    = $Status
        AllBookInPolicy           = $CalSettings.AllBookInPolicy
        AllRequestOutOfPolicy     = $CalSettings.AllRequestOutOfPolicy
        AddNewRequestsTentatively = $CalSettings.AddNewRequestsTentatively
        ConflictPercentageAllowed = $CalSettings.ConflictPercentageAllowed
        MaximumConflictInstances  = $CalSettings.MaximumConflictInstances
    }
}

# Display summary
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "VERIFICATION SUMMARY" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Total Rooms: $($AllRooms.Count)" -ForegroundColor White
Write-Host "Correctly Configured: $CorrectCount" -ForegroundColor Green
Write-Host "Need Fixing: $IncorrectCount" -ForegroundColor $(if ($IncorrectCount -gt 0) { "Red" } else { "Green" })

# Export and display results
$ExportPath = ".\RoomVerification-$(Get-Date -Format 'yyyyMMdd-HHmmss').csv"
$Results | Export-Csv -Path $ExportPath -NoTypeInformation
Write-Host "`nResults exported to: $ExportPath" -ForegroundColor Green

$Results | Out-GridView -Title "Room Configuration Verification"

# Show rooms that need fixing
if ($IncorrectCount -gt 0) {
    Write-Host "`nROOMS THAT NEED FIXING:" -ForegroundColor Red
    $Results | Where-Object { $_.Status -eq "NEEDS FIX" } | 
        Format-Table DisplayName, RoomType, AllBookInPolicy, ConflictPercentageAllowed -AutoSize
}

Key Settings Explained

Critical Settings for "Anyone Can Book"

Setting Value Purpose
AutomateProcessing AutoAccept Automatically process booking requests
AllBookInPolicy True Allow anyone to book (bypass permission list)
AllRequestOutOfPolicy False Don't auto-decline anyone
AllRequestInPolicy False Don't require approval for anyone
AddNewRequestsTentatively False Process immediately, don't wait

Conflict Prevention Settings

Setting Conference Rooms PTO Trackers
ConflictPercentageAllowed 0 100
MaximumConflictInstances 0 1000

Conference Rooms: No overlapping bookings allowed (0% conflict tolerance)
PTO Trackers: Unlimited overlapping bookings allowed (100% conflict tolerance)

Display Settings (Teams Rooms)

Setting Value Purpose
DeleteSubject False Show meeting subject on device
AddOrganizerToSubject True Show who booked it
RemovePrivateProperty True Private meetings still show as busy
DeleteComments True Remove meeting body text
DeleteAttachments True Remove attachments

Quick Reference Commands

Fix a Single Room Immediately

# Standard conference room
Set-CalendarProcessing -Identity "RoomEmail@rlgbuilds.com" `
    -AllBookInPolicy $true `
    -AllRequestOutOfPolicy $false `
    -AddNewRequestsTentatively $false

# PTO tracking room
Set-CalendarProcessing -Identity "PTORoom@rlgbuilds.com" `
    -AllBookInPolicy $true `
    -AllRequestOutOfPolicy $false `
    -AddNewRequestsTentatively $false `
    -ConflictPercentageAllowed 100 `
    -MaximumConflictInstances 1000

Check Current Settings

Get-CalendarProcessing -Identity "RoomEmail@rlgbuilds.com" | 
    FL AllBookInPolicy,AllRequestOutOfPolicy,AddNewRequestsTentatively,ConflictPercentageAllowed,MaximumConflictInstances

List All Room Mailboxes

Get-EXOMailbox -RecipientTypeDetails RoomMailbox | 
    Select DisplayName,PrimarySmtpAddress | 
    Sort DisplayName

New Room Setup

When creating a new conference room or Teams Room, apply this configuration immediately:

# After creating the room mailbox, run:
Set-CalendarProcessing -Identity "NewRoom@rlgbuilds.com" `
    -AutomateProcessing AutoAccept `
    -AllBookInPolicy $true `
    -AllRequestOutOfPolicy $false `
    -AllRequestInPolicy $false `
    -AddNewRequestsTentatively $false `
    -ConflictPercentageAllowed 0 `
    -MaximumConflictInstances 0 `
    -DeleteSubject $false `
    -AddOrganizerToSubject $true `
    -RemovePrivateProperty $true `
    -DeleteComments $true `
    -DeleteAttachments $true

Troubleshooting

Users Getting "No Permission" Error

Cause: AllBookInPolicy: False or AddNewRequestsTentatively: True

Fix:

Set-CalendarProcessing -Identity "RoomEmail@rlgbuilds.com" `
    -AllBookInPolicy $true `
    -AddNewRequestsTentatively $false

Bookings Stuck in "Tentative" Status

Cause: AddNewRequestsTentatively: True with no delegates

Fix:

Set-CalendarProcessing -Identity "RoomEmail@rlgbuilds.com" `
    -AddNewRequestsTentatively $false

Double Bookings Occurring

Cause: ConflictPercentageAllowed > 0 or MaximumConflictInstances > 0 on conference room

Fix:

Set-CalendarProcessing -Identity "RoomEmail@rlgbuilds.com" `
    -ConflictPercentageAllowed 0 `
    -MaximumConflictInstances 0

Important Notes

Teams Rooms vs Regular Conference Rooms

  • Same booking configuration applies to both
  • Teams Room devices just display what's on the calendar
  • Display settings control what shows on the Teams Room screen
  • Booking policy settings control who can book and conflict handling

PTO Tracking Rooms

Current PTO tracking rooms at RLG:

  1. RL Site Safety Team (RLSiteSafetyTeam@rlgbuilds.com)
  2. CLE PTO (CLEPTO@RLGbuilds.com)
  3. SMO PTO (smopto@rlgbuilds.com)

These require special configuration to allow multiple overlapping bookings.

Configuration Changes Take Effect

  • Changes are typically effective within 15-30 seconds
  • No need to restart Teams Room devices
  • Users can retry booking immediately after configuration change

Success Criteria

After applying this configuration:

  • ✅ All users can book any conference room
  • ✅ Booking conflicts are automatically prevented
  • ✅ No "permission" errors occur
  • ✅ Bookings are processed immediately (no waiting)
  • ✅ Teams Room devices display meeting details correctly
  • ✅ PTO trackers allow multiple simultaneous bookings

Document Version: 1.0
Last Updated: January 16, 2026
Status: Production - Verified Working