Microsoft Outlook 2016 › Outlook Options › Preferences › Calendar Options
Working hours
Supported on SUPPORTED_Windows7 (defined in the Windows templates)
What it does
Sets the value in the corresponding UI option.
What it writes
- Hive
- HKEY_CURRENT_USER
- Registry key
software\policies\microsoft\office\16.0\outlook\options\calendar
Why it needs changes for Intune
- Policy references a Windows supportedOn definition.
- ADMX-INTUNE-WINDOWS-SUPPORTEDON-REFERENCE
Options
| Option | Type | Registry value | Allowed values |
|---|---|---|---|
| Start timeDefault: 8:00 AM | Drop-down list | caldefstart |
|
| End TimeDefault: 5:00 PM | Drop-down list | caldefend |
|
Configure and deploy
Choose a state and the option values; the output below is generated from the template for exactly that.
Enabled · User · template defaults
Registry file (.reg)
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar]
"caldefend"=dword:000003FC
"caldefstart"=dword:000001E0
PowerShell
$ErrorActionPreference = 'Stop'
function Set-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name,
[Parameter(Mandatory = $true)][string] $PropertyType,
[Parameter(Mandatory = $true)][object] $Value
)
if (-not (Test-Path -LiteralPath $Path)) {
New-Item -Path $Path -Force | Out-Null
}
New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}
function Remove-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name
)
if (Test-Path -LiteralPath $Path) {
Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
}
}
function Clear-RegistryKeyValues {
param(
[Parameter(Mandatory = $true)][string] $Path
)
if (-not (Test-Path -LiteralPath $Path)) {
return
}
foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
}
}
# Policy: Working hours
# Name: L_Workinghours
# Scope: User
# State: Enabled
# Source: outlk16.admx
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar' -Name 'caldefstart' -PropertyType 'DWord' -Value 480
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar' -Name 'caldefend' -PropertyType 'DWord' -Value 1020
- The OMA-URI is an inferred ADMX-backed Policy CSP candidate derived from the source ADMX file name and policy name.
- Some Microsoft policies use built-in Policy CSP pages whose area names don't match the ADMX file name, so verify the candidate against Microsoft Learn before deployment.
ADMX profile candidate (OMA-URI)
./User/Vendor/MSFT/Policy/Config/ADMX_outlk16/L_WorkinghoursADMX SyncML candidate
<SyncML xmlns="SYNCML:SYNCML1.2">
<SyncBody>
<Replace>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/Policy/Config/ADMX_outlk16/L_Workinghours</LocURI>
</Target>
<Data><enabled/>
<data id="L_Starttime" value="0"/>
<data id="L_EndTime" value="0"/></Data>
</Item>
</Replace>
<Final/>
</SyncBody>
</SyncML>Intune remediation scripts
Detection
$ErrorActionPreference = 'Stop'
$reasons = [System.Collections.Generic.List[string]]::new()
function Test-RegistryValueExists {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name
)
if (-not (Test-Path -LiteralPath $Path)) {
return $false
}
return $null -ne (Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue)
}
function Test-RegistryValueEquals {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name,
[Parameter(Mandatory = $true)][string] $Kind,
[Parameter(Mandatory = $true)][object] $Expected
)
if (-not (Test-Path -LiteralPath $Path)) {
return $false
}
$valueObject = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue
if ($null -eq $valueObject) {
return $false
}
$actual = $valueObject.$Name
switch ($Kind) {
'String' { return [string]$actual -ceq [string]$Expected }
'ExpandString' { return [string]$actual -ceq [string]$Expected }
'DWord' { return [uint32]$actual -eq [uint32]$Expected }
'QWord' { return [uint64]$actual -eq [uint64]$Expected }
'MultiString' {
$actualArray = @($actual)
$expectedArray = @($Expected)
if ($actualArray.Count -ne $expectedArray.Count) { return $false }
for ($index = 0; $index -lt $actualArray.Count; $index++) {
if ([string]$actualArray[$index] -cne [string]$expectedArray[$index]) { return $false }
}
return $true
}
'Binary' {
$actualArray = [byte[]]$actual
$expectedArray = [byte[]]$Expected
if ($actualArray.Length -ne $expectedArray.Length) { return $false }
for ($index = 0; $index -lt $actualArray.Length; $index++) {
if ($actualArray[$index] -ne $expectedArray[$index]) { return $false }
}
return $true
}
default { return [string]$actual -ceq [string]$Expected }
}
}
# Policy: Working hours
# Name: L_Workinghours
# Scope: User
# State: Enabled
# Source: outlk16.admx
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar' -Name 'caldefstart' -Kind 'DWord' -Expected 480
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar\caldefstart') | Out-Null
}
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar' -Name 'caldefend' -Kind 'DWord' -Expected 1020
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar\caldefend') | Out-Null
}
if ($reasons.Count -eq 0) {
Write-Output 'Compliant'
exit 0
}
$reasons | ForEach-Object { Write-Output $_ }
exit 1
Remediation
$ErrorActionPreference = 'Stop'
function Set-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name,
[Parameter(Mandatory = $true)][string] $PropertyType,
[Parameter(Mandatory = $true)][object] $Value
)
if (-not (Test-Path -LiteralPath $Path)) {
New-Item -Path $Path -Force | Out-Null
}
New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}
function Remove-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name
)
if (Test-Path -LiteralPath $Path) {
Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
}
}
function Clear-RegistryKeyValues {
param(
[Parameter(Mandatory = $true)][string] $Path
)
if (-not (Test-Path -LiteralPath $Path)) {
return
}
foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
}
}
# Policy: Working hours
# Name: L_Workinghours
# Scope: User
# State: Enabled
# Source: outlk16.admx
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar' -Name 'caldefstart' -PropertyType 'DWord' -Value 480
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\software\policies\microsoft\office\16.0\outlook\options\calendar' -Name 'caldefend' -PropertyType 'DWord' -Value 1020
History 1 retained release
- 5568.100010 Aug 2026
- Already present in the first release ChangeIntel keeps.
Template
- Internal name
L_Workinghours- Namespace
outlk16.Office.Microsoft.Policies.Windows- Template file
outlk16.admx- Release
- Microsoft 365 Apps 5568.1000 · file set
8be05d876aae137d…
Definition, editor controls and support
Definition
<policy class="User" displayName="$(string.L_Workinghours)" explainText="$(string.L_SetsthevalueinthecorrespondingUIoption)" key="software\policies\microsoft\office\16.0\outlook\options\calendar" name="L_Workinghours" presentation="$(presentation.L_Workinghours)" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="outlk16.Office.Microsoft.Policies.Windows:L_Calendaroptions" />
<supportedOn ref="Microsoft.Policies.Windows:SUPPORTED_Windows7" />
<elements>
<enum id="L_Starttime" valueName="caldefstart">
<item displayName="$(string.L_800AM)">
<value>
<decimal value="480" />
</value>
</item>
<item displayName="$(string.L_1200AM)">
<value>
<decimal value="0" />
</value>
</item>
<item displayName="$(string.L_1230AM)">
<value>
<decimal value="30" />
</value>
</item>
<item displayName="$(string.L_100AM)">
<value>
<decimal value="60" />
</value>
</item>
<item displayName="$(string.L_130AM)">
<value>
<decimal value="90" />
</value>
</item>
<item displayName="$(string.L_200AM)">
<value>
<decimal value="120" />
</value>
</item>
<item displayName="$(string.L_230AM)">
<value>
<decimal value="150" />
</value>
</item>
<item displayName="$(string.L_300AM)">
<value>
<decimal value="180" />
</value>
</item>
<item displayName="$(string.L_330AM)">
<value>
<decimal value="210" />
</value>
</item>
<item displayName="$(string.L_400AM)">
<value>
<decimal value="240" />
</value>
</item>
<item displayName="$(string.L_430AM)">
<value>
<decimal value="270" />
</value>
</item>
<item displayName="$(string.L_500AM)">
<value>
<decimal value="300" />
</value>
</item>
<item displayName="$(string.L_530AM)">
<value>
<decimal value="330" />
</value>
</item>
<item displayName="$(string.L_600AM)">
<value>
<decimal value="360" />
</value>
</item>
<item displayName="$(string.L_630AM)">
<value>
<decimal value="390" />
</value>
</item>
<item displayName="$(string.L_700AM)">
<value>
<decimal value="420" />
</value>
</item>
<item displayName="$(string.L_730AM)">
<value>
<decimal value="450" />
</value>
</item>
<item displayName="$(string.L_800AM)">
<value>
<decimal value="480" />
</value>
</item>
<item displayName="$(string.L_830AM)">
<value>
<decimal value="510" />
</value>
</item>
<item displayName="$(string.L_900AM)">
<value>
<decimal value="540" />
</value>
</item>
<item displayName="$(string.L_930AM)">
<value>
<decimal value="570" />
</value>
</item>
<item displayName="$(string.L_1000AM)">
<value>
<decimal value="600" />
</value>
</item>
<item displayName="$(string.L_1030AM)">
<value>
<decimal value="630" />
</value>
</item>
<item displayName="$(string.L_1100AM)">
<value>
<decimal value="660" />
</value>
</item>
<item displayName="$(string.L_1130AM)">
<value>
<decimal value="690" />
</value>
</item>
<item displayName="$(string.L_1200PM)">
<value>
<decimal value="720" />
</value>
</item>
<item displayName="$(string.L_1230PM)">
<value>
<decimal value="750" />
</value>
</item>
<item displayName="$(string.L_100PM)">
<value>
<decimal value="780" />
</value>
</item>
<item displayName="$(string.L_130PM)">
<value>
<decimal value="810" />
</value>
</item>
<item displayName="$(string.L_200PM)">
<value>
<decimal value="840" />
</value>
</item>
<item displayName="$(string.L_230PM)">
<value>
<decimal value="870" />
</value>
</item>
<item displayName="$(string.L_300PM)">
<value>
<decimal value="900" />
</value>
</item>
<item displayName="$(string.L_330PM)">
<value>
<decimal value="930" />
</value>
</item>
<item displayName="$(string.L_400PM)">
<value>
<decimal value="960" />
</value>
</item>
<item displayName="$(string.L_430PM)">
<value>
<decimal value="990" />
</value>
</item>
<item displayName="$(string.L_500PM)">
<value>
<decimal value="1020" />
</value>
</item>
<item displayName="$(string.L_530PM)">
<value>
<decimal value="1050" />
</value>
</item>
<item displayName="$(string.L_600PM)">
<value>
<decimal value="1080" />
</value>
</item>
<item displayName="$(string.L_630PM)">
<value>
<decimal value="1110" />
</value>
</item>
<item displayName="$(string.L_700PM)">
<value>
<decimal value="1140" />
</value>
</item>
<item displayName="$(string.L_730PM)">
<value>
<decimal value="1170" />
</value>
</item>
<item displayName="$(string.L_800PM)">
<value>
<decimal value="1200" />
</value>
</item>
<item displayName="$(string.L_830PM)">
<value>
<decimal value="1230" />
</value>
</item>
<item displayName="$(string.L_900PM)">
<value>
<decimal value="1260" />
</value>
</item>
<item displayName="$(string.L_930PM)">
<value>
<decimal value="1290" />
</value>
</item>
<item displayName="$(string.L_1000PM)">
<value>
<decimal value="1320" />
</value>
</item>
<item displayName="$(string.L_1030PM)">
<value>
<decimal value="1350" />
</value>
</item>
<item displayName="$(string.L_1100PM)">
<value>
<decimal value="1380" />
</value>
</item>
<item displayName="$(string.L_1130PM)">
<value>
<decimal value="1410" />
</value>
</item>
</enum>
<enum id="L_EndTime" valueName="caldefend">
<item displayName="$(string.L_500PM)">
<value>
<decimal value="1020" />
</value>
</item>
<item displayName="$(string.L_1200AM)">
<value>
<decimal value="0" />
</value>
</item>
<item displayName="$(string.L_1230AM)">
<value>
<decimal value="30" />
</value>
</item>
<item displayName="$(string.L_100AM)">
<value>
<decimal value="60" />
</value>
</item>
<item displayName="$(string.L_130AM)">
<value>
<decimal value="90" />
</value>
</item>
<item displayName="$(string.L_200AM)">
<value>
<decimal value="120" />
</value>
</item>
<item displayName="$(string.L_230AM)">
<value>
<decimal value="150" />
</value>
</item>
<item displayName="$(string.L_300AM)">
<value>
<decimal value="180" />
</value>
</item>
<item displayName="$(string.L_330AM)">
<value>
<decimal value="210" />
</value>
</item>
<item displayName="$(string.L_400AM)">
<value>
<decimal value="240" />
</value>
</item>
<item displayName="$(string.L_430AM)">
<value>
<decimal value="270" />
</value>
</item>
<item displayName="$(string.L_500AM)">
<value>
<decimal value="300" />
</value>
</item>
<item displayName="$(string.L_530AM)">
<value>
<decimal value="330" />
</value>
</item>
<item displayName="$(string.L_600AM)">
<value>
<decimal value="360" />
</value>
</item>
<item displayName="$(string.L_630AM)">
<value>
<decimal value="390" />
</value>
</item>
<item displayName="$(string.L_700AM)">
<value>
<decimal value="420" />
</value>
</item>
<item displayName="$(string.L_730AM)">
<value>
<decimal value="450" />
</value>
</item>
<item displayName="$(string.L_800AM)">
<value>
<decimal value="480" />
</value>
</item>
<item displayName="$(string.L_830AM)">
<value>
<decimal value="510" />
</value>
</item>
<item displayName="$(string.L_900AM)">
<value>
<decimal value="540" />
</value>
</item>
<item displayName="$(string.L_930AM)">
<value>
<decimal value="570" />
</value>
</item>
<item displayName="$(string.L_1000AM)">
<value>
<decimal value="600" />
</value>
</item>
<item displayName="$(string.L_1030AM)">
<value>
<decimal value="630" />
</value>
</item>
<item displayName="$(string.L_1100AM)">
<value>
<decimal value="660" />
</value>
</item>
<item displayName="$(string.L_1130AM)">
<value>
<decimal value="690" />
</value>
</item>
<item displayName="$(string.L_1200PM)">
<value>
<decimal value="720" />
</value>
</item>
<item displayName="$(string.L_1230PM)">
<value>
<decimal value="750" />
</value>
</item>
<item displayName="$(string.L_100PM)">
<value>
<decimal value="780" />
</value>
</item>
<item displayName="$(string.L_130PM)">
<value>
<decimal value="810" />
</value>
</item>
<item displayName="$(string.L_200PM)">
<value>
<decimal value="840" />
</value>
</item>
<item displayName="$(string.L_230PM)">
<value>
<decimal value="870" />
</value>
</item>
<item displayName="$(string.L_300PM)">
<value>
<decimal value="900" />
</value>
</item>
<item displayName="$(string.L_330PM)">
<value>
<decimal value="930" />
</value>
</item>
<item displayName="$(string.L_400PM)">
<value>
<decimal value="960" />
</value>
</item>
<item displayName="$(string.L_430PM)">
<value>
<decimal value="990" />
</value>
</item>
<item displayName="$(string.L_500PM)">
<value>
<decimal value="1020" />
</value>
</item>
<item displayName="$(string.L_530PM)">
<value>
<decimal value="1050" />
</value>
</item>
<item displayName="$(string.L_600PM)">
<value>
<decimal value="1080" />
</value>
</item>
<item displayName="$(string.L_630PM)">
<value>
<decimal value="1110" />
</value>
</item>
<item displayName="$(string.L_700PM)">
<value>
<decimal value="1140" />
</value>
</item>
<item displayName="$(string.L_730PM)">
<value>
<decimal value="1170" />
</value>
</item>
<item displayName="$(string.L_800PM)">
<value>
<decimal value="1200" />
</value>
</item>
<item displayName="$(string.L_830PM)">
<value>
<decimal value="1230" />
</value>
</item>
<item displayName="$(string.L_900PM)">
<value>
<decimal value="1260" />
</value>
</item>
<item displayName="$(string.L_930PM)">
<value>
<decimal value="1290" />
</value>
</item>
<item displayName="$(string.L_1000PM)">
<value>
<decimal value="1320" />
</value>
</item>
<item displayName="$(string.L_1030PM)">
<value>
<decimal value="1350" />
</value>
</item>
<item displayName="$(string.L_1100PM)">
<value>
<decimal value="1380" />
</value>
</item>
<item displayName="$(string.L_1130PM)">
<value>
<decimal value="1410" />
</value>
</item>
</enum>
</elements>
</policy>Editor controls
<presentation id="L_Workinghours" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<dropdownList defaultItem="0" noSort="true" refId="L_Starttime">Start time:</dropdownList>
<dropdownList defaultItem="0" noSort="true" refId="L_EndTime">End Time:</dropdownList>
</presentation>Supported platforms and category
outlk16.Office.Microsoft.Policies.Windows:category:L_Calendaroptions
<category displayName="$(string.L_Calendaroptions)" name="L_Calendaroptions" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="outlk16.Office.Microsoft.Policies.Windows:L_Preferences" />
</category>
outlk16.Office.Microsoft.Policies.Windows:category:L_MicrosoftOfficeOutlook
<category displayName="$(string.L_MicrosoftOfficeOutlook)" name="L_MicrosoftOfficeOutlook" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
outlk16.Office.Microsoft.Policies.Windows:category:L_OutlookOptions
<category displayName="$(string.L_OutlookOptions)" name="L_OutlookOptions" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="outlk16.Office.Microsoft.Policies.Windows:L_MicrosoftOfficeOutlook" />
</category>
outlk16.Office.Microsoft.Policies.Windows:category:L_Preferences
<category displayName="$(string.L_Preferences)" name="L_Preferences" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="outlk16.Office.Microsoft.Policies.Windows:L_OutlookOptions" />
</category>
outlk16.Office.Microsoft.Policies.Windows:unresolved:Microsoft.Policies.Windows:SUPPORTED_Windows7
<unresolved reference="Microsoft.Policies.Windows:SUPPORTED_Windows7" />
outlk16.Office.Microsoft.Policies.Windows:category:L_Calendaroptions
<category displayName="$(string.L_Calendaroptions)" name="L_Calendaroptions" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="outlk16.Office.Microsoft.Policies.Windows:L_Preferences" />
</category>
<strings><string id="outlk16.Office.Microsoft.Policies.Windows:L_Calendaroptions">Calendar Options</string></strings>
outlk16.Office.Microsoft.Policies.Windows:category:L_MicrosoftOfficeOutlook
<category displayName="$(string.L_MicrosoftOfficeOutlook)" name="L_MicrosoftOfficeOutlook" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="outlk16.Office.Microsoft.Policies.Windows:L_MicrosoftOfficeOutlook">Microsoft Outlook 2016</string></strings>
outlk16.Office.Microsoft.Policies.Windows:category:L_OutlookOptions
<category displayName="$(string.L_OutlookOptions)" name="L_OutlookOptions" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="outlk16.Office.Microsoft.Policies.Windows:L_MicrosoftOfficeOutlook" />
</category>
<strings><string id="outlk16.Office.Microsoft.Policies.Windows:L_OutlookOptions">Outlook Options</string></strings>
outlk16.Office.Microsoft.Policies.Windows:category:L_Preferences
<category displayName="$(string.L_Preferences)" name="L_Preferences" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="outlk16.Office.Microsoft.Policies.Windows:L_OutlookOptions" />
</category>
<strings><string id="outlk16.Office.Microsoft.Policies.Windows:L_Preferences">Preferences</string></strings>