Thursday, March 15, 2012

How To Series Sample 5 : Clearing the Suggested Contacts with EWS and Powershell

In Outlook 2010 "Suggested Contacts" is feature that automatically creates a Contact for each address you send an email to . If you need clear this folder for any reason you can do this in EWS in 2010 using the new Empty operation which allows you to easily delete all the Items within a folder (without the need to use a batch operations). Here's a example of how to clear the Suggested Contacts folder note its deletes stuff so be careful. For more information about the AutoComplete cache see http://gsexdev.blogspot.com.au/2013/10/exporting-suggested-contacts-owa-auto.html

I've put a download of this script here the script itself looks like

  1. ## Load Managed API dll  
  2. Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\1.1\Microsoft.Exchange.WebServices.dll"  
  3.   
  4. ## Set Exchange Version  
  5. $ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP1  
  6.   
  7. ## Create Exchange Service Object  
  8. $service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion)  
  9.   
  10. ## Set Credentials to use two options are availible Option1 to use explict credentials or Option 2 use the Default (logged On) credentials  
  11.   
  12. #Credentials Option 1 using UPN for the windows Account  
  13. $creds = New-Object System.Net.NetworkCredential("user@domain","password")   
  14. $service.Credentials = $creds      
  15.   
  16. #Credentials Option 2  
  17. #service.UseDefaultCredentials = $true  
  18.   
  19. ## Choose to ignore any SSL Warning issues caused by Self Signed Certificates  
  20.   
  21. [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}  
  22.   
  23. ## Set the URL of the CAS (Client Access Server) to use two options are availbe to use Autodiscover to find the CAS URL or Hardcode the CAS to use  
  24.   
  25. #CAS URL Option 1 Autodiscover  
  26. $service.AutodiscoverUrl("user@domain",{$true})  
  27. "Using CAS Server : " + $Service.url   
  28.    
  29. #CAS URL Option 2 Hardcoded  
  30.   
  31. #$uri=[system.URI] "https://casservername/ews/exchange.asmx"  
  32. #$service.Url = $uri    
  33.   
  34. ## Optional section for Exchange Impersonation  
  35.   
  36. #$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, "email@domain.com")  
  37. $MailboxName = "user@domain"  
  38.   
  39. $folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot,$MailboxName)   
  40.   
  41. $fvFolderView = new-object Microsoft.Exchange.WebServices.Data.FolderView(1)  
  42. $SfSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName,"Suggested Contacts")  
  43. $findFolderResults = $service.FindFolders($folderid,$SfSearchFilter,$fvFolderView)  
  44.   
  45. if($findFolderResults.Folders.Count -gt 0){  
  46.     "Emptying Suggested Contacts"  
  47.     $findFolderResults.Folders[0].Empty([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete, $true);  
  48. }  
  49. else{  
  50.     "Folder not found"  
  51. }  


10 comments:

berel said...

Glen, how would one modify this to work on Microsoft Exchange Online?

Glen said...

Nothing I developed it against Exchange Online so it should work okay as long as you put the correct credentials and mail address in place of user@domain in the script

Cheers
Glen

Lars Mueller said...

Hi Glen,
is there any possibilty to apply this to all existent mailboxes?
Thanks!
Lars

Glen Scales said...

You would need to put it within a Get-Mailbox loop to do this eg feed it with the Inputs

Cheers
Glen

Taryel said...

HI GLEN
CAN YOU EXPLAIN HOW USE THIS SCRIPT FOR BULK DELETION ENTRIES IN SUGGESTED CONTACT FOLDER FOR ALL MAILBOX IN ORGANIZATION?

Anonymous said...

Is there a way to remove specific Suggested Contacts from a few mailboxes & not all addresses?

Anonymous said...

I don't think that this actually fixes AutoComplete for Outlook 2010/2013. The autocomplete stream is stored in the Associated Contents table of the Inbox of the mail account’s delivery store (for Outlook 2010 or Outlook 2013). Here you are editing suggested contacts, which is valuable too but not the same thing I think.

Glen Scales said...
This comment has been removed by the author.
Glen Scales said...

Okay thanks technically it was wrong so I've updated the wording and linked to a later script http://gsexdev.blogspot.com.au/2013/10/exporting-suggested-contacts-owa-auto.html the deals with FAI item in the root of the mailbox

Cheers
Glen

Marc said...

I found another script probably inspired by yours here : https://gallery.technet.microsoft.com/Clearing-AutoComplete-and-92b8d32a but it nevers finds items to delete. I get the same results as the people who commented on that script's page ...