PowerShell reference
Everything needed for one room, in order. Run from Windows PowerShell as Administrator; on macOS install pwsh first.
Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber Import-Module ExchangeOnlineManagement Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com
Confirm the mailbox exists and is the right type:
Get-Mailbox -RecipientTypeDetails RoomMailbox | Format-Table Name, PrimarySmtpAddress
Create the room list and add the room:
New-DistributionGroup -Name "ZenSpace Pods" ` -PrimarySmtpAddress "zenspace-pods@yourdomain.com" -RoomList
Add-DistributionGroupMember -Identity "zenspace-pods@yourdomain.com" ` -Member "pod01@yourdomain.com"
Set the booking behaviour:
Set-CalendarProcessing -Identity "pod01@yourdomain.com" ` -AutomateProcessing AutoAccept -AllowConflicts $false ` -DeleteSubject $false -AddOrganizerToSubject $false
Fill in the place metadata, which some tenants require before the room is indexed:
Set-Place -Identity "pod01@yourdomain.com" ` -Building "HQ" -Floor 1 -City "Hayward" -CountryOrRegion "US" -Capacity 4
Check whether the index has caught up — this is the command to re-run while waiting. Localities filling in is the signal that discovery will now work:
Get-Place -Type Room | Format-Table DisplayName, Localities, Capacity
To read or delete events from Outlook rather than through the API, grant yourself calendar access. Use Add- for a user who has no entry yet and Set- only to change an existing one; Set- on a new user fails with no existing permission entry found:
Add-MailboxFolderPermission -Identity "pod01@yourdomain.com:\Calendar" ` -User "you@yourdomain.com" -AccessRights Editor
Optional: limit the app to these rooms
Application permissions are tenant-wide by default — the app can reach every mailbox in the organisation, including executives'. An application access policy narrows that to one group, and is worth offering proactively when an IT administrator asks what the integration can see:
New-DistributionGroup -Name "ZenSpace Calendar Scope" ` -PrimarySmtpAddress "zs-scope@yourdomain.com" -Type Security
Add-DistributionGroupMember -Identity "zs-scope@yourdomain.com" ` -Member "pod01@yourdomain.com"
New-ApplicationAccessPolicy -AppId <client-id> ` -PolicyScopeGroupId "zs-scope@yourdomain.com" ` -AccessRight RestrictAccess -Description "ZenSpace adapter limited to pod rooms"
Verify with Test-ApplicationAccessPolicy, which should return Granted for a pod and Denied for anyone else. The policy takes 30 to 60 minutes to apply — and if set up before the room works, it becomes another candidate cause to rule out.