Admin
PowerShell for Microsoft Bookings admins
The documented PowerShell for Microsoft Bookings: every Bookings parameter on Set-OrganizationConfig and Set-OwaMailboxPolicy, plus mailbox cmdlets for pages.
Last updated 17 sources
Every PowerShell task for Microsoft Bookings runs in Exchange Online PowerShell. Tenant-wide switches are Bookings* parameters on Set-OrganizationConfig; who can create shared pages, the domain those pages get, and Bookings with me are parameters on Set-OwaMailboxPolicy; and each shared booking page is a mailbox of type SchedulingMailbox that you find, open and delete with the ordinary mailbox cmdlets. As of October 2026, 8 of the 18 Bookings parameters on Set-OrganizationConfig, and 2 of the 3 on Set-OwaMailboxPolicy, have no description in the reference. This page lists only what Microsoft documents, and says where the documentation is empty or wrong.
What each control means for users is in Microsoft Bookings admin controls.
Before you run anything#
You need the ExchangeOnlineManagement module (the Exchange Online PowerShell V3 module). It works in Windows PowerShell 5.1 and in PowerShell 7; module 3.10.0 and later need PowerShell 7.6.0 or later.
Install-Module -Name ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName admin@contoso.comThe Bookings articles on Microsoft Learn use a global admin. The cmdlet reference pages name no role and say only that "you need to be assigned permissions". To see which role groups in your tenant can run a cmdlet, and a specific parameter, ask Exchange:
$Perms = Get-ManagementRole -Cmdlet Set-OrganizationConfig -CmdletParameters BookingsAuthEnabled
$Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-Table -Auto Role,RoleAssigneeType,RoleAssigneeName}One trap: the add-staff article on Microsoft Learn links to an old "Connect to Microsoft 365 with PowerShell" page before its Add-MailboxPermission steps. Those are Exchange Online cmdlets, so connect with Connect-ExchangeOnline.
Save the current state before you change anything:
Get-OrganizationConfig | Format-List Bookings*
Get-OwaMailboxPolicy | Format-List Name, BookingsMailboxCreationEnabled, BookingsMailboxDomain, PersonalBookingsDisabled
Get-CASMailbox -Identity user@contoso.com | Format-List OwaMailboxPolicySet-OrganizationConfig: the tenant switches#
All 18 Bookings parameters are Exchange Online only. They're Boolean except the two naming-policy strings. "Admin center" is the matching label under Settings → Org settings → Bookings.
| Parameter | Admin center | What $true does, per the reference | Documented default |
|---|---|---|---|
BookingsEnabled | Allow your organization to use Bookings | Enables Bookings in the organization | $false (see below) |
BookingsAuthEnabled | Block shared bookings from outside your organization | "All new and existing Bookings pages are forced to authenticate users before they can book" | None |
BookingsSocialSharingRestricted | Block social sharing options | Restricts the social sharing options inside Bookings | $false |
BookingsExposureOfStaffDetailsRestricted | Block sharing staff details with customers | Internal staff attributes, such as email addresses, aren't visible to external customers | None |
BookingsMembershipApprovalRequired | Require staff approvals before sharing free/busy information | New staff must accept membership before they're bookable | None |
BookingsSmsMicrosoftEnabled | Allow Microsoft to send SMS messages | No description | None in the reference; the Teams admin article says on |
BookingsSearchEngineIndexDisabled | Disable direct search engine indexing | No description | None |
BookingsPhoneNumberEntryRestricted | Restrict collection of customer data | Phone numbers can't be collected | None |
BookingsAddressEntryRestricted | Restrict collection of customer data | Addresses can't be collected | None |
BookingsNotesEntryRestricted | Restrict collection of customer data | Appointment notes can't be collected | None |
BookingsCreationOfCustomQuestionsRestricted | Restrict collection of customer data | Bookings admins can't add custom questions | None |
BookingsNamingPolicyEnabled | Enforce naming policy for shared booking pages alias | No description | None |
BookingsNamingPolicyPrefix | Same | No description (string) | None |
BookingsNamingPolicyPrefixEnabled | Same | No description | None |
BookingsNamingPolicySuffix | Same | No description (string) | None |
BookingsNamingPolicySuffixEnabled | Same | No description | None |
BookingsPaymentsEnabled | None | Enables "the online payment node inside Bookings" | $false |
BookingsBlockedWordsEnabled | None | No description | None |
Where the reference is wrong or empty, as of October 2026:
BookingsEnableddefault. The reference says$false"is the default", which doesn't match tenants where Bookings is already on. Check your value; don't assume.BookingsPhoneNumberEntryRestricted. Its$trueand$falselines talk about "appointment notes", an apparent copy of the notes parameter. The opening sentence and the admin center label both say it's about phone numbers.BookingsPaymentsEnabled. Still listed, but the Bookings FAQ says "there's no payment support in Bookings". Setting it doesn't bring payments back; see payments.BookingsBlockedWordsEnabled. No description and no matching control in the granular-controls article. We don't know what it does, so leave it alone.- The naming policy. The five parameter names suggest an on/off switch plus a prefix and a suffix, each with its own toggle, but Microsoft hasn't described them. Set the policy in the admin center, then read the values back with
Get-OrganizationConfig.
Typical changes:
# Force sign-in on every shared page (new and existing)
Set-OrganizationConfig -BookingsAuthEnabled $true
# Stop collecting phone numbers and addresses on every booking form
Set-OrganizationConfig -BookingsPhoneNumberEntryRestricted $true -BookingsAddressEntryRestricted $true
# Make new staff opt in before they can be booked
Set-OrganizationConfig -BookingsMembershipApprovalRequired $trueMicrosoft says tenant setting changes can take up to four hours to apply.
What we saw when testing (September 2026)#
In our captures of the public booking page, every shared page fetched a tenant settings object on load containing BookingsEnabled, BookingsAuthEnabled, BookingsPhoneNumberEntryRestricted, BookingsAddressEntryRestricted, BookingsNotesEntryRestricted, BookingsCreationOfCustomQuestionsRestricted and BookingsSmsMicrosoftEnabled. When the restriction flags were set, the page hid phone, address and notes and dropped custom questions, whatever the service said. So these flags act on existing pages, not just new ones, once the change has propagated.
Set-OwaMailboxPolicy: creation, domain and Bookings with me#
OWA mailbox policies are per user: each mailbox has one, assigned with Set-CASMailbox. The Bookings steps on Microsoft Learn assume you have only OwaMailboxPolicy-Default. If you have more, a setting changed on one policy doesn't reach users on the others. The cmdlet reference says policy changes "might take up to 60 minutes to take effect".
| Parameter | Type | What it does | Notes |
|---|---|---|---|
BookingsMailboxCreationEnabled | Boolean | $false stops users on the policy creating shared booking pages | The reference says it "allows you disable Microsoft Bookings", but the turn-on article uses it only for page creation. Users without it can still be staff, including Administrator. New policies allow creation by default |
BookingsMailboxDomain | String | The domain new booking mailboxes get, instead of onmicrosoft.com | No description in the reference. The custom domain article: new pages only |
PersonalBookingsDisabled | Boolean | $true turns off Bookings with me (Personal Bookings) for users on the policy | No description in the reference. Now the only control: EWS organization and CAS settings no longer apply |
Only named people may create shared pages:
New-OwaMailboxPolicy -Name "BookingsCreators"
Set-CASMailbox -Identity creator@contoso.com -OwaMailboxPolicy "BookingsCreators"
Set-OwaMailboxPolicy "OwaMailboxPolicy-Default" -BookingsMailboxCreationEnabled:$falseNew pages use your own domain:
Get-OwaMailboxPolicy -Identity OwaMailboxPolicy-Default | Format-List BookingsMailboxDomain
Set-OwaMailboxPolicy -Identity OwaMailboxPolicy-Default -BookingsMailboxDomain "contoso.com"The per-user version in the custom domain article is missing a space before -OwaMailboxPolicy in its Set-CASMailbox line; copy it carefully.
Bookings with me off for everyone, or for some people:
# Everyone on the default policy
Set-OwaMailboxPolicy -Identity "OwaMailboxPolicy-Default" -PersonalBookingsDisabled $true
# Only some people: a separate policy, then assign it
New-OwaMailboxPolicy -Name "BwmDisablePolicy"
Set-OwaMailboxPolicy -Identity "BwmDisablePolicy" -PersonalBookingsDisabled $true
Set-CASMailbox -Identity user@contoso.com -OwaMailboxPolicy "BwmDisablePolicy"Assigning a new policy replaces the user's old one, so carry over any other OWA settings that policy had. The trade-offs of each switch are in turning Bookings off for users.
Finding booking mailboxes#
Shared pages are SchedulingMailbox recipients. Both Get-EXOMailbox and Get-Mailbox return 1,000 results by default, and the delete article's list command doesn't add -ResultSize, so large tenants should:
# Every booking page, with its creation date
Get-EXOMailbox -RecipientTypeDetails SchedulingMailbox -ResultSize Unlimited -Properties WhenCreated |
Select-Object DisplayName, PrimarySmtpAddress, WhenCreated
# Find one by part of its name
Get-EXOMailbox -Anr "dental" -RecipientTypeDetails SchedulingMailbox
# The FAQ command: every booking mailbox and who has access to it
Get-Mailbox -RecipientTypeDetails SchedulingMailbox -ResultSize Unlimited |
Get-MailboxPermission |
Select-Object Identity, User, AccessRights |
Where-Object { $_.User -like '*@*' }WhenCreated isn't in the default property set of Get-EXOMailbox, hence -Properties. Rows from the last command whose only users have left are orphaned pages. Counting pages over time is covered in usage and adoption.
Giving an admin access to a page#
Full Access plus Send As on the booking mailbox lets someone open the page in Bookings without being bookable. Microsoft notes it only works if they don't already have the Viewer role on that page.
Add-MailboxPermission -Identity "page@contoso.com" -User "admin@contoso.com" -AccessRights FullAccess -Deny:$false -AutoMapping:$false
Add-RecipientPermission -Identity "page@contoso.com" -Trustee "admin@contoso.com" -AccessRights SendAs -Confirm:$false-AutoMapping defaults to $true, which adds the mailbox to the admin's Outlook. To turn auto-mapping off after the fact, the reference says you must remove the permission with Remove-MailboxPermission and grant it again. Full Access in Exchange Online also opens private calendar items. When and why to do this is in admin access to every calendar.
Changing a page's address#
The Teams admin article gives Set-Mailbox for moving an existing page off onmicrosoft.com:
Set-Mailbox -Identity business@contoso.onmicrosoft.com -WindowsEmailAddress business@contoso.com -EmailAddresses business@contoso.comThat changes the sender and the page link, and old links can break. Read changing the sender email and changing the page URL before running it.
Deleting a page#
Remove-Mailbox -Identity <BookingCalendarToDelete>
Get-EXOMailbox -RecipientTypeDetails SchedulingMailbox -ResultSize UnlimitedUse the exact alias; several pages can have similar names. Two Microsoft documents disagree about what happens next. The delete article says the page's data "can't be recovered". The Remove-Mailbox reference says that -Identity on its own removes the user account but retains the mailbox until the deleted-mailbox retention period ends, and that -PermanentlyDelete purges a soft-deleted one:
Get-Mailbox -Identity <alias> -SoftDeletedMailbox | Remove-Mailbox -PermanentlyDeleteMicrosoft doesn't document restoring a booking page from a soft-deleted mailbox, and we haven't tested it. Export the bookings first and treat deletion as final. See deleting a page.
What PowerShell can't do for Bookings#
- Staff, services, customers and appointments. No Exchange cmdlet manages them. Use the Bookings web app or the Microsoft Graph Bookings API. That includes time off: see holidays and time off.
- Bookings with me settings. Beyond on or off, nothing is exposed.
- Page settings such as the one-time password, the booking page access setting or the language. These are set per page in Bookings.
BookingsXP is independent and not affiliated with or endorsed by Microsoft.
- AnswerTurn off Microsoft Bookings or limit who creates pages
- GuideMicrosoft Bookings admin checklist
- AnswerHow can an admin see every Microsoft Bookings calendar?
- AnswerHow to delete a Microsoft Bookings shared booking page
- AnswerHow to change the Microsoft Bookings sender email address
- AnswerHow do I change my Microsoft Bookings page URL or domain?
- AnswerTrack Microsoft Bookings usage across your organisation
- AnswerWhy does Microsoft Bookings say 'Mailbox not found'?
- AnswerWhy does my Microsoft Bookings page make people sign in?
- AnswerAdd required custom questions in Microsoft Bookings
- AnswerWhy can't I find a Microsoft Bookings page I created?
Questions people also ask
Sources
- Microsoft Learn: Set organizationconfig (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Set owamailboxpolicy (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Get exomailbox (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Get mailbox (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Add mailboxpermission (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Remove mailbox (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Connect to exchange online powershell (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Exchange online powershell v2 (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Find exchange cmdlet permissions (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Turn bookings on or off (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Granular controls shared bookings (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Bookings in outlook (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Custom domain support (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Add staff (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Delete calendar (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Bookings faq (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Bookings app admin (opens in a new tab) · learn.microsoft.com
Edit or question? hello@bookingsxp.com