Address Book

Resources:

Contact Sharing:

Connecting to Exchange (Leopard) and Active Directory via LDAP

The only real problem is figuring out the correct naming context1, which can be done by issuing:

$ ldapsearch -h your.exchange.server -x -b '' -s base '(objectclass=*)' 'namingContexts'

…and pick out the correct namingContext entry from the output. Bear in mind that on a multi-branch tree (like the ones in multinationals) you might not want to pick the shortest.

Listing Recently Modified Contacts

This AppleScript (taken from here) is very useful when keeping track of modifications done by syncing your address book with other sources:

(* Find recently modified entries in the Address Book

Input: a time interval (backwards from today) in the variable "daysBeforeToday"
Output: a string on the clipboard, format: YYYY-MM-DD (tab) Name (return)

©2009, Michael Bach, <www.michaelbach.de> *)

set daysBeforeToday to 7 -- <<<  change as desired or read from a dialog

tell application "Address Book"
  copy (current date) - daysBeforeToday * 24 * minutes * 60 to referenceDate
  copy (every person whose (modification date > referenceDate)) to modifiedPersons
  set s to ""
  repeat with aPerson in modifiedPersons
    set d to ((modification date) of aPerson) -- now change to international format and forget the hours
    set dateString to (year of d as string) & "-" & (my twoDigits((month of d) as number)) & "-" & (my twoDigits(day of d) as string)
    set s to s & dateString & tab & (name of aPerson) & return
  end repeat
  set the clipboard to s --for pasting into other applications
  s -- to view immediately in the script editor
end tell

on twoDigits(aNumber) -- trivial utility for formatting
  if aNumber < 10 then return "0" & (aNumber as string)
  return (aNumber as string)
end twoDigits

Enabling the Debug menu

defaults write com.apple.AddressBook ABShowDebugMenu -bool true

1 Abridged from here for my own reference.