If you are finding that some contacts are not appearing in the GAL then confirm that they are mail contacts and not created using AD. Contacts created using AD Users and Computers are not recognized by Exchange.
To work out if your contacts have been created using AD tools or Exchange, run the below command to check all contacts in a particular OU:
Get-Contact -OrganizationalUnit “OU=TestContacts,OU=Contacts,OU=Litwareinc.com,DC=litwareinc,DC=com” | ft Name,RecipientType
Here we can see that AD3 is a Contact (created by AD tools) and AD1 and AD2 are MailContacts (created by Exchange). AD3 is not showing up in the GAL or Address Lists.
To convert contacts from AD contacts to Exchange MailContacts, run the below command on a single line to convert all contacts in a particular OU:
Get-Contact -OrganizationalUnit “OU=TestContacts,OU=Contacts,OU=Litwareinc.com,DC=litwareinc,DC=com” -RecipientTypeDetails Contact | % {Enable-MailContact $_.Name -ExternalEmailAddress $_.WindowsEmailAddress}