When creating a meeting in Microsoft Teams or Outlook, you may notice that a user appears unavailable or busy at certain times even though they are actually free. This usually happens because of differences in Working Hours and Time Zone settings configured in Outlook Calendar.

These settings determine how a user’s availability is displayed in the Scheduling Assistant. If a user’s Working Hours or Time Zone is incorrect, their calendar may show them as unavailable during times when they would normally be working. This can cause confusion and impact meeting scheduling especially in global or cross-region teams.

To avoid such issues, organizations should ensure that all users have consistent Time Zone and Working Hours settings, based on the region where the organization primarily operates.

Why Working Hours and Time Zone Settings Matter

1234

12345

Best Practices for Organizations

Ensuring consistent Time Zone and Working Hours configurations greatly reduces scheduling conflicts and improves the overall meeting experience in Microsoft Teams.

Get Working Hour Time and Time zone for individual user

Get-MailboxCalendarConfiguration -Identity “”
123456

Set Working Hour Time and Time zone for individual user

Set-MailboxCalendarConfiguration -Identity “”                                                                      -WorkingHoursStartTime "08:30:00"

-WorkingHoursEndTime "17:30:00" `

-WorkingHoursTimeZone "Sri Lanka Standard Time" `

-WorkDays Monday,Tuesday,Wednesday,Thursday,Friday

1234567

Get All user list of Working Hours Time Zone and Times

$out = ".\user_workinghours.csv"

Get-ExoMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox | ForEach-Object {

$cal = Get-MailboxCalendarConfiguration -Identity $_.PrimarySmtpAddress

 [pscustomobject]@{

UserPrincipalName     = $_.PrimarySmtpAddress

DisplayName           = $_.DisplayName

WorkingHoursStartTime = $cal.WorkingHoursStartTime

WorkingHoursEndTime   = $cal.WorkingHoursEndTime

WorkingHoursTimeZone  = $cal.WorkingHoursTimeZone

WorkingDays           = ($cal.WorkingDays -join ",")

 }

 } | Export-Csv -Path $out -NoTypeInformation -Encoding UTF8
12345678

Use below script to set all users Working Hours Time to correct region

# ==== 1. Update the path to your CSV ==== (Create CSV file with primary email addresses)

$CsvPath = "C:\Temp\Users_To_Fix_TimeZone.csv"   # ← Change this

 

# Expected column name in the CSV: UserPrincipalName  (or PrimarySmtpAddress)

$Users = Import-Csv -Path $CsvPath

 

# ==== 2. Optional: Dry-run first (highly recommended) ====

Write-Host "DRY-RUN: These users will be updated (no changes made yet):" -ForegroundColor Cyan

$Users | Format-Table UserPrincipalName

 

$Confirm = Read-Host "Type YES to proceed with the actual change"

if ($Confirm -ne "YES") { Write-Host "Aborted." -ForegroundColor Red; break }

 

# ==== 3. Actual update ====

$Success = 0

$Failed  = 0

 

foreach ($User in $Users) {

    $UPN = $User.UserPrincipalName.Trim()   # works if column is named UserPrincipalName

    # If your column is named PrimarySmtpAddress or Email instead, use:

    # $UPN = $User.PrimarySmtpAddress.Trim()

    # $UPN = $User.Email.Trim()

 

    try {

        Set-MailboxCalendarConfiguration -Identity $UPN `

            -WorkingHoursStartTime "08:30:00" `

    -WorkingHoursEndTime   "17:30:00" `

    -WorkingHoursTimeZone  "Sri Lanka Standard Time" `

    -WorkDays Monday,Tuesday,Wednesday,Thursday,Friday -ErrorAction Stop

 

        Write-Host "$UPN → Fixed" -ForegroundColor Green

        $Success++

    }

    catch {

        Write-Host "$UPN → FAILED: $($_.Exception.Message)" -ForegroundColor Red

        $Failed++

    }

}

 

Write-Host "`n=== DONE ===" -ForegroundColor Cyan

Write-Host "Successfully updated: $Success" -ForegroundColor Green

Write-Host "Failed: $Failed" -ForegroundColor Red