Fix Newly Created User Not Showing in Global Address List (GAL) or Offline Address Book (OAB)

When a newly provisioned user mailbox does not appear in the Global Address List (GAL) or Offline Address Book (OAB) in Exchange Server, Exchange Hybrid, or Exchange Online, the root cause almost always comes down to one of four directory or recipient configuration issues:

  1. Missing showInAddressBook attribute in on-premises Active Directory (common when accounts are created via New-ADUser instead of New-RemoteMailbox / Enable-RemoteMailbox).
  2. msExchHideFromAddressLists set to TRUE (or HiddenFromAddressListsEnabled in Exchange Online) without mailNickname populated (Entra Connect ignores changes to msExchHideFromAddressLists if mailNickname is blank).
  3. Outlook Cached Exchange Mode (OAB latency) where the user appears in OWA (which queries the live GAL) but not in Outlook Desktop (which downloads OAB updates every 24 hours).
  4. Address Book Policy (ABP) scoping restricting which GAL the searching user can view.

Diagnostic Decision Flowchart

GAL & OAB Missing User Troubleshooting Flow
Check 1: Client Scope
OWA vs. Outlook Desktop
Visible in OWA? Update Outlook Offline Address Book (OAB)
Check 2: Visibility Flag
Hidden From Address Lists
Verify HiddenFromAddressListsEnabled & msExchHideFromAddressLists
Check 3: Hybrid AD Sync
AD Exchange Attributes
Ensure mailNickname & showInAddressBook DN are populated
Check 4: Remediation
Sync & Address List Tickle
Run Start-ADSyncSyncCycle & Set-Mailbox

Cause 1: Missing showInAddressBook Attribute in Active Directory (On-Premises / Hybrid)

When an administrator creates an Active Directory user directly with New-ADUser or a third-party IAM tool without running Exchange Recipient Update commands (Enable-RemoteMailbox / Enable-Mailbox), the multi-valued showInAddressBook attribute remains empty.

Fix via Active Directory PowerShell

First, verify whether showInAddressBook and mailNickname are populated on the affected user:

POWERSHELL
Import-Module ActiveDirectory

# Inspect GAL visibility attributes on the problematic user
Get-ADUser -Identity "newuser" -Properties showInAddressBook, mailNickname, msExchHideFromAddressLists |
    Select-Object Name, mailNickname, msExchHideFromAddressLists, @{N='showInAddressBook';E={$_.showInAddressBook -join '; '}}

If populated properly, showInAddressBook contains the Distinguished Names (DNs) of the Default Global Address List and relevant Address Lists:

TEXT
CN=Default Global Address List,CN=All Global Address Lists,CN=Address Lists Container,CN=Contoso,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=corp,DC=domain,DC=com

If showInAddressBook is blank:

  • Preferred Method (Exchange Management Shell): Run Enable-RemoteMailbox (for Hybrid) or Update-Recipient -Identity "newuser" so Exchange stamps the exact address lists automatically.
  • Direct AD PowerShell Method: Copy the showInAddressBook multi-valued array from a known working user in the same department/OU and apply it to the new user:
POWERSHELL
# 1. Capture the showInAddressBook values from a working user
$WorkingAddressLists = (Get-ADUser -Identity "sunil" -Properties showInAddressBook).showInAddressBook

# 2. Apply the Address List DNs and ensure msExchHideFromAddressLists is FALSE
Set-ADUser -Identity "newuser" `
    -Add @{ showInAddressBook = [string[]]$WorkingAddressLists } `
    -Replace @{ msExchHideFromAddressLists = $false }

Fix via Active Directory Administrative Center (GUI)

  1. Open Active Directory Administrative Center (ADAC) and locate a working user who is visible in the GAL.
  2. Open the user's properties and go to Extensions → Attribute Editor.
  3. Locate showInAddressBook, copy the Default Global Address List DN, and click Cancel.
  4. Open the newly created user's properties → Extensions → Attribute Editor.
  5. If showInAddressBook is not listed, click Filter and uncheck "Show only attributes that have values".
  6. Edit showInAddressBook, paste the copied DN value, and click OK.

Cause 2: msExchHideFromAddressLists Not Syncing to Exchange Online (Missing mailNickname)

In Exchange Hybrid / Entra Connect environments, a very common trap occurs when you uncheck "Hide from address lists" (msExchHideFromAddressLists = FALSE) in Active Directory, run a Delta Sync, and the mailbox still remains hidden in Exchange Online (HiddenFromAddressListsEnabled : True).

Why This Happens

Entra Connect's default inbound synchronization rule (In from AD - User Exchange) scopes Exchange attributes using a filter that requires mailNickname (Alias) to be populated. If mailNickname is <not set> in local Active Directory, Entra Connect ignores msExchHideFromAddressLists completely.

Fix via PowerShell

POWERSHELL
# Populate mailNickname and unhide the user in On-Premises Active Directory
$UserSam = "newuser"
Set-ADUser -Identity $UserSam -Replace @{
    mailNickname               = $UserSam
    msExchHideFromAddressLists = $false
}

# Trigger an Entra Connect Delta Sync (run on your Entra Connect Server)
Start-ADSyncSyncCycle -PolicyType Delta

Cause 3: Re-Evaluating Address List Membership in Exchange Online ("Tickling" the Mailbox)

In cloud-only or hybrid Exchange Online environments, verify the mailbox's AddressListMembership and HiddenFromAddressListsEnabled properties:

POWERSHELL
Connect-ExchangeOnline -ShowBanner:$false

# Check if the mailbox is hidden or missing Default Global Address List membership
Get-Mailbox -Identity "[email protected]" |
    Select-Object DisplayName, HiddenFromAddressListsEnabled, AddressBookPolicy, AddressListMembership

If HiddenFromAddressListsEnabled is $true on a cloud-managed mailbox:

POWERSHELL
Set-Mailbox -Identity "[email protected]" -HiddenFromAddressListsEnabled $false

If AddressListMembership is blank even though HiddenFromAddressListsEnabled is $false, force Exchange Online's Address List Assistant to re-evaluate the mailbox by "tickling" a harmless property on the mailbox:

POWERSHELL
# Force Exchange Online to recalculate AddressListMembership for the mailbox
$Mbx = Get-Mailbox -Identity "[email protected]"
Set-Mailbox -Identity $Mbx.Identity -SimpleDisplayName $Mbx.SimpleDisplayName

Production Diagnostic Script: Test-UserGalVisibility.ps1

Run this diagnostic function in Exchange Online PowerShell to immediately audit why a user is not showing up in the GAL:

POWERSHELL
function Test-UserGalVisibility {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$Identity
    )

    $Recipient = Get-EXORecipient -Identity $Identity -Properties `
        HiddenFromAddressListsEnabled, AddressListMembership, AddressBookPolicy, IsDirSynced, Alias, RecipientTypeDetails -ErrorAction Stop

    $InDefaultGal = $Recipient.AddressListMembership -match "Default Global Address List"

    [PSCustomObject]@{
        DisplayName                   = $Recipient.DisplayName
        PrimarySmtpAddress            = $Recipient.PrimarySmtpAddress
        RecipientTypeDetails          = $Recipient.RecipientTypeDetails
        AliasPopulated                = -not [string]::IsNullOrWhiteSpace($Recipient.Alias)
        IsDirSynced                   = $Recipient.IsDirSynced
        HiddenFromAddressListsEnabled = $Recipient.HiddenFromAddressListsEnabled
        InDefaultGAL                  = [bool]$InDefaultGal
        AddressBookPolicy             = $Recipient.AddressBookPolicy
        AddressListCount              = ($Recipient.AddressListMembership | Measure-Object).Count
        RecommendedAction             = if ($Recipient.HiddenFromAddressListsEnabled) {
            if ($Recipient.IsDirSynced) { "Set msExchHideFromAddressLists=FALSE & populate mailNickname in On-Prem AD" }
            else { "Run: Set-Mailbox '$Identity' -HiddenFromAddressListsEnabled `$false" }
        } elseif (-not $InDefaultGal) {
            "Tickle mailbox with Set-Mailbox or check showInAddressBook in On-Prem AD"
        } else {
            "User is in the live GAL! If missing in Outlook Desktop, update Offline Address Book (OAB)."
        }
    }
}

# Example Usage:
# Test-UserGalVisibility -Identity "[email protected]"