All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Migrated to REST API ExchangeOnline V3.2.0 due to the depreciation of remote powershell. Please see the latest README.md for updated instructions.
- Experimental Multi-Thread.ps1 that can be used in place of the EWSContactSync.ps1 script. This alternative version uses PowerShell Jobs to run top to 10 mailbox syncs at once.
- The script can now remove phone numbers (Business/Mobile) from contacts
- Corrected inadvertent case sensitivty on the contact's email address when using the ExcludeSharedMailboxContacts switch by changing the '.Contains method to '-Contains'.
- Corrected behavior where the script would mistake a similar email for the contact's email when sorting the user's contact folder into into the 'Delete', 'Update', or 'Create' logial groups. This also fixes the "Contact parameter is null" error.
- Upgraded EWS authenication from ADAL to the MSAL per work from Glenn Scales: https://github.com/gscales/Powershell-Scripts/blob/master/EWSContacts/Update%20for%20the%20ExchangeContacts%20Module%20for%20oAuth%20-%20Support%20for%20Client%20Credentials%20flow.md
- All basic authenication has been replaced with Certificate-based OAuth Authenication in preperation for the October depreciation (See README.md for a guide on how to set this up.)
- Some errors have been addressed by forcing TLS 1.2 to due depreciation of the older TLS protocols
- The ability to authenicate using basic credentials has been removed (See depreciation above)
- Fixed "No Given Name" error when attempting to update a contact when there are duplicates in the same mailbox with the same emails. The script now syncs only the first contact returned and deletes the duplicates.
- Fixed minor bug that caused a 1000 contact limit when using the non-user contacts switch
- Deleted unused/obsolete functions from from the EWS Contacts module
- Added expermental support for Modern Authenication... See here for some backround information: https://techcommunity.microsoft.com/t5/exchange-team-blog/upcoming-changes-to-exchange-web-services-ews-api-for-office-365/ba-p/608055
- Added IncludeNonUserContacts switch to Get-GALContacts and EWSContactSync
- Added ExcludeSharedMailboxContacts switch to Get-GALContacts and EWSContactSync
- Shared mailboxes are now automatically included as contacts by default. To exclude shared mailboxes, use the ExcludeSharedMailboxContacts switch. This change is intented to improve clarity.
- The RequirePhoneNumber parameter has been changed to ExcludeContactsWithoutPhoneNumber in order to improve clarity
- New function: SetEXCContactObject; Updates an EWS Contact object that is passed into the function
- New function: NewEXCContactObject; Creates a new EWS Contact. The EWS Service and Contact Folder objects are passed into this function
- Sync-ContactList function now uses SetEXCContactObject and NewEXCContactObject to improve the speed of the script
- Fatal error when there are no contacts in the user's mailbox
- Changed the logging method to transcript
- Re-did the previous changes to fix an unknown parameter error
- When "DIRECTORY" is specified for the MailboxList, now every user in the directory will be included
- Moved the main functionality of the script into a function called Sync-ContactList
- Integrated all custom functions (library.ps1) into the EWSContacts Module
- Read the user's mailbox once for all contacts rather than for every contact when determining if a contact needs to be deleted, updated, or added.
- Only update a contact if it needs to be updated. If both the new and old contact are exact matches, skip to the next contact.
- Removes contacts from the target folder that are no longer in the Global Address List. (NOTE: Does not currently delete contacts with no email address)
- Parameters for CredentialPath, FolderName, MailboxList, & LogPath
- Log writing functionality (See Write-Log function in library.ps1)
- Error handling
- Ported from previous version of the the Multi-Contact Update script, this fork looks to overwrite contacts rather than delete them.