In this article, we’ll look at how to set working hours in Exchange Server/Exchange Online user mailboxes using PowerShell.
What Are Working Hours in Exchange and Outlook?
The ability to set work hours in the calendar is a convenient feature available in Exchange mailboxes. It helps you view your colleagues’ availability in Outlook, plan your schedule and appointments, and avoid meetings outside business hours.
How to Change Working Hours in Outlook and Outlook Web Access
Users can set their working hours in their own mailboxes. The default working hours in Outlook are 8:00 AM to 5:00 PM, Monday through Friday.
- In on-premises Exchange (classic Outlook Web Access), working hours can be configured under:
Settings (Gear icon) > Options > Calendar > Calendar Appearance.

Change Work Hours in Outlook Desktop

In classic desktop Outlook client go to File > Options > Calendar > Work Time.
Change Work Hours in Outlook Web App (Microsoft 365)

In Microsoft 365 (modern Outlook on the web), you can configure working hours with the Work Hours and Location (WHL) feature. You can find it under Settings > Calendar > Work hours and location.
In addition to setting flexible work hours for each day, you can set multiple work time slots per day (for shift workers). The user can also specify its location. For example, whether they work remotely or in the office.
Here is the difference between these 2 interfaces:
- Classic OWA (on-premises Exchange) uses basic working hours settings
- Modern Outlook on the web (Microsoft 365) uses the Work Hours and Location (WHL) model. It supports flexible schedules and multiple time slots per day
How to Configure Mailbox Working Hours Using PowerShell
An Exchange administrator can use PowerShell cmdlets to manage work schedules in other users’ mailboxes and shared mailboxes (available in both on-premises Exchange Server and cloud-based service):
- Get-MailboxCalendarConfiguration
- Set-MailboxCalendarConfiguration
Connect to your Exchange Online or Exchange Server tenant using PowerShell.
View Current Mailbox Work Time Settings
Get the current work time and calendar time zone settings in the specific user mailbox:
Get-MailboxCalendarConfiguration meeting_room_1@theitbros.com

By default, all Exchange mailboxes have the following settings:
- WorkDays: WeekDays
- WorkingHoursStartTime: 08:00
- WorkingHoursEndTime: 17:00
- WorkingHoursTimeZone: (this setting depends on mailbox/tenant regional settings, for example, Pacific Standard Time)
Change Time Zone and Work Hours for a User Mailbox
To change the settings, time zone, and working hours in Calendar to match your organization, run the command:
Set-MailboxCalendarConfiguration -Identity meeting_room_1@theitbros.com -WorkingHoursTimeZone "Eastern Standard Time" -WorkingHoursStartTime 09:00:00 -WorkingHoursEndTime 18:00:00
You can get a list of all valid time zone identifiers with the command:
Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" |
Select-Object PSChildName
Or on any Windows machine:
[System.TimeZoneInfo]::GetSystemTimeZones() | Select-Object Id, DisplayName
Only working days can be changed (valid values: None, AllDays, Weekdays, WeekEndDays, Sunday, etc.). Multiple values can be specified separated by commas:
Set-MailboxCalendarConfiguration -Identity meeting_room_1@theitbros.com -WorkDays Weekdays,Saturday
The new work time settings affect the legacy working hours config that is used by Exchange and legacy Outlook clients (e.g., Outlook desktop). In Microsoft 365 Outlook on the web, WHL settings may take precedence.
In Microsoft 365, if a user has configured Work Hours and Location (WHL), these settings may override/differ from the values set through PowerShell console.
To change the business hours settings for all mailboxes in bulk, you can use simple PowerShell pipeline. For example, you need to update a number of LA meeting room calendars to match the organization’s schedule.
First, list the current room mailbox settings:
Get-EXOMailbox -ResultSize Unlimited | Where {$_.DisplayName -match "LA-" -and $_.RecipientTypeDetails -match "RoomMailbox"}| Get-MailboxCalendarConfiguration | select Identity, WorkDays, WorkingHoursStartTime, WorkingHoursEndTime 
Note. Use Get-EXOMailbox instead of the Get-Mailbox cmdlet for Exchange Online.
How to Check Working Hours for Multiple Mailboxes
Before making bulk changes, you may want to review the current working hours config across multiple mailboxes.
For example, to list work day and working hour settings for all room mailboxes, use the following command:
Get-EXOMailbox -ResultSize Unlimited |
Where-Object {$_.RecipientTypeDetails -eq "RoomMailbox"} |
Get-MailboxCalendarConfiguration |
Select-Object Identity,
WorkDays,
WorkingHoursStartTime,
WorkingHoursEndTime,
WorkingHoursTimeZone
In case you want to review the settings for all user mailboxes, run the command:
Get-EXOMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox |
Get-MailboxCalendarConfiguration |
Select-Object Identity,
WorkDays,
WorkingHoursStartTime,
WorkingHoursEndTime,
WorkingHoursTimeZone
This will allow you to identify mailboxes with inconsistent schedules before applying bulk updates.
Bulk Update Working Hours for Multiple Mailboxes
Important note. In case you are performing bulk updates using Set-MailboxCalendarConfiguration, keep in mind that this modifies only legacy working hours.
In Microsoft 365, these changes do not update or override Work Hours and Location (WHL) settings that were configured by users.
Important. Before performing a bulk update, you should always check the list of mailboxes that match your filter. Note that a broad/incorrect filter can unintentionally modify a large number of mailboxes.
For example, review the affected mailboxes first:
Get-EXOMailbox -ResultSize Unlimited |
Where {$_.DisplayName -match "LA-" -and $_.RecipientTypeDetails -match "RoomMailbox"} |
Select DisplayName,PrimarySmtpAddressAfter confirming that the results are correct, you can run the Set-MailboxCalendarConfiguration command.
To update the time zone and working hours settings in all room resource calendars, run:
Get-EXOMailbox -ResultSize Unlimited | Where {$_.DisplayName -match โLA-โ -and $_.RecipientTypeDetails -match โRoomMailboxโ}| Set-MailboxCalendarConfiguration -WorkingHoursStartTime 08:00:00 -WorkingHoursEndTime 21:59:59 -WorkingHoursTimeZone "Pacific Standard Time" To view legacy working hours settings configured in a mailbox:
Get-MailboxCalendarConfiguration -Identity user@domain.com |
Select-Object Identity, WorkDays, WorkingHoursStartTime,
WorkingHoursEndTime, WorkingHoursTimeZone
Note. WHL settings configured via Outlook on the web are stored separately and may not be fully visible through PowerShell.
Can Work Hours and Location (WHL) Be Managed with PowerShell?
Keep in mind that Microsoft 365 has 2 different systems for managing working hours:
- Legacy working hours (these are used by Exchange and classic Outlook clients)
- Work Hours and Location (WHL) that are used by modern Outlook on the web and Microsoft 365
Using the Set-MailboxCalendarConfiguration cmdlet you can only update legacy working hours settings:
Set-MailboxCalendarConfiguration -Identity user@domain.com `
-WorkingHoursStartTime 09:00:00 `
-WorkingHoursEndTime 18:00:00
But note that these changes may not be reflected in Outlook on the web (in case the user has configured Work Hours and Location or WHL).
Exchange PowerShell does not provide a cmdlet to directly manage Work Hours and Location (WHL) settings. However, WHL settings can be managed programmatically through Microsoft Graph. Microsoft Graph provides APIs to read and update workHoursAndLocations settings, while the Outlook on the web interface provides the user-facing management experience.
Managing Work Hours and Location with Microsoft Graph
In Microsoft 365, you can manage Work Hours and Location settings programmatically through Microsoft Graph. You can read the current WHL settings using the following command:
Get-MgUserSettingWorkHourAndLocation -UserId $UserId
You can also manage some Work Hours and Location settings through Microsoft Graph. As example, the following command updates maxSharedWorkLocationDetails, which controls how much work-location info can be shared with colleagues:
Import-Module Microsoft.Graph.Users
$params = @{
WorkHoursAndLocations = @{
maxSharedWorkLocationDetails = "approximate"
}
}
Update-MgUserSetting `
-UserId $UserId `
-WorkHoursAndLocations $params.WorkHoursAndLocations
The example above changes the sharing level for work-location details. It does not config the user’s daily working hours/work-location schedule.
Microsoft Graph also provides the workHoursAndLocations REST resource for reading and updating WHL settings.
Note. Microsoft Graph app permissions are not currently supported for these WHL APIs. The documented API permissions are delegated permissions, such as Calendars.ReadWrite or MailboxSettings.ReadWrite.
Therefore:
- You can use Set-MailboxCalendarConfiguration to manage legacy working hours in Exchange Server, room mailboxes, and bulk administrative tasks.
- You can use Outlook on the web when users need to configure flexible schedules and work locations interactively.
- You can use Microsoft Graph to read and update Work Hours and Location settings programmatically in Microsoft 365.
Keep in mind that in Microsoft 365 environments, WHL settings typically take precedence over legacy working hours in modern Outlook clients.
When to Use PowerShell, Microsoft Graph, or Outlook UI
We recommend using PowerShell console in the following cases:
- You need to config working hours in bulk (e.g., room mailboxes)
- You are managing on-premises Exchange environments
- You rely on legacy working hours for scheduling logic
We recommend Microsoft Graph in the following cases:
- programmatic management of WHL
- Microsoft 365 automation
- integration with applications/scripts
We recommend you to use Outlook on the web (WHL) during the following cases:
- Users need flexible schedules (for example, multiple time slots per day)
- You have to specify Work location (remote/office)
- You want settings to be reflected in modern Outlook UI
Conclusion
Depending on your environment, you will use 2 separate systems to manage working hours in Exchange and Microsoft 365:
| Setting | Applies to | Managed via |
|---|---|---|
| Legacy working hours | Exchange Server, classic Outlook clients | PowerShell (Set-MailboxCalendarConfiguration) |
| Work Hours and Location (WHL) | Microsoft 365, modern Outlook on the web | Outlook settings or user self-service |
We recommend using PowerShell for legacy working hours, Exchange Server environments, and supported bulk mailbox operations. For programmatic management of Work Hours and Location in Microsoft 365, you should use Microsoft Graph. For individual users who need to config flexible schedules/work locations interactively, you need to use Outlook on the web.
What are working hours in Exchange and Outlook?
Working hours define the time range when users are considered available in Outlook and Exchange calendars. These settings help colleagues schedule meetings within business hours and avoid off-hour invitations.
What are the default working hours in Outlook?
By default, Outlook sets working hours from 8:00 AM to 5:00 PM, Monday through Friday. You can adjust these in Outlook desktop, Outlook Web Access (OWA), or Microsoft 365 Outlook Web App.
How can I change working hours in Outlook desktop?
Open Outlook โ File โ Options โ Calendar โ Work Time, then modify your start and end times, and select the active workdays.
How do I change working hours in Outlook Web Access (OWA)?
In OWA for on-premises Exchange, click the gear icon โ Options โ Calendar โ Calendar Appearance, then set your preferred working days and hours.
How do I change working hours in Outlook Web App (Microsoft 365)?
Go to Settings โ Calendar โ Work hours and location (WHL). You can define flexible work hours for each day, add multiple time slots for shifts, and indicate your location (office or remote).
Can an Exchange administrator change working hours for other users?
Yes. Administrators can use PowerShell cmdlets like Get-MailboxCalendarConfiguration and Set-MailboxCalendarConfiguration to view or modify working hours in user or shared mailboxes.
