Skip to content

HealthChecker: False positive "Duplicate Overrides" error when ServerMismatch overrides exist #2554

Description

Summary

The HealthChecker reports a false positive "Duplicate Overrides" error when multiple Setting Overrides exist for the same ComponentName/SectionName/Parameter but are targeted at different servers. Overrides with Status = ServerMismatch (meaning they don't apply to the server being analyzed) are incorrectly included in the duplicate detection logic.

Steps to Reproduce

  1. Have two or more Exchange servers (e.g., Server-A and Server-B).
  2. Create per-server Setting Overrides that target the same component/section/parameter (e.g., via the Flighting Service), such as:
    • FlightingServiceOverride_Server-A_F1.1 targeting Server-A
    • FlightingServiceOverride_Server-B_F1.1 targeting Server-B
  3. Run HealthChecker against either server.

Expected Behavior

Each server should only evaluate overrides that apply to it (i.e., Status = Accepted). Since only one override per server is Accepted, no duplicate should be flagged.

Actual Behavior

Both servers show the red error:

Error! Duplicate Overrides have been detected for the same parameter causing possible misconfigurations. Please address as soon as possible.

This happens because when Server-A is analyzed, it sees:

Override Name ComponentName SectionName Status Parameters
FlightingServiceOverride_Server-B_F1.1 Global ExchangeOnpremAsThirdPartyAppId ServerMismatch Enabled=true
FlightingServiceOverride_Server-A_F1.1 Global ExchangeOnpremAsThirdPartyAppId Accepted Enabled=true

Both entries are grouped together and the parameter Enabled appears twice, triggering the duplicate detection — even though only one override actually applies to the server.

Root Cause

In Invoke-AnalyzerExchangeInformation.ps1, the duplicate detection groups all SimpleSettingOverrides without filtering out ServerMismatch entries:

$groupedResults = $exchangeInformation.SettingOverrides.SimpleSettingOverrides |
Group-Object ComponentName, SectionName |
Where-Object { $_.Count -gt 1 }

The ServerMismatch status means the override is targeted at a different server and does not apply. It should be excluded before grouping, similar to how Get-FilteredSettingOverrideInformation.ps1 already filters on Status -eq "Accepted" for its callers.

The Status property is populated by Get-ExchangeSettingOverride.ps1 directly from the Exchange diagnostic XML.

Suggested Fix

Add a Where-Object filter before the Group-Object to exclude ServerMismatch overrides:

$groupedResults = $exchangeInformation.SettingOverrides.SimpleSettingOverrides |
    Where-Object { $_.Status -ne "ServerMismatch" } |
    Group-Object ComponentName, SectionName |
    Where-Object { $_.Count -gt 1 }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions