OUTLOOK NICKNAMES REBUILD – AT LAST!

1. Start, powershell…, right click Run As Administrator to start a PowerShell session.

2. Set-ExecutionPolicy RemoteSigned, now exit

3. Create a new text file with this content, save as nk2.ps1 and then right-click, Run with Powershell

4. The contacts will be in Suggested Contacts, so you will need to create a new email, BCC all the contacts and press Save (BUT DON’T SEND!)

# OUTLOOK AUTOCOMPLETE POWERIMPORT
#
# Author: N. Gjermundshaug - Degree Consulting Group AS - www.degree.no
#
# This script requires Outlook to be installed and configured. It scans through the SentItems folder.
# For each sent email, it loops through each Recipient - and adds the recipient to the "Suggested Contacts" Address Group.
# Contacts in the "Suggested Contacts" will be displayed in the autocomplete field - when composing new emails (like nk2).
# Contacts are only added once from the script.
$outlook = new-object -com outlook.application
$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type]
$namespace = $outlook.GetNameSpace("MAPI")
$sentItems = $namespace.getDefaultFolder($olFolders::olFolderSentMail)
$alreadyAddedEmails = @() #Empty Array
$counter = 0;
$totalItems = $sentItems.items.count;
Write-Host "Scanning through" $totalItems "emails in SentItems"
$contacts = $outlook.Session.GetDefaultFolder($olFolders::olFolderSuggestedContacts)
##############################################################################################################
# FUNCTION - Adds Name/Email to SuggestedContacts - Unless it has already been added before (by this script).
##############################################################################################################
Function AddToSuggestedContactsIfNotAlreadyAdded ($name, $email)
{
if(($name -eq "") -or ($email -eq "") -or ($name -eq $null) -or ($email -eq $null)){
 return;
 }
$name = $name.Replace("'", "").Replace("""", "")
$contactAlreadyAdded = $false
foreach ($elem in $global:alreadyAddedEmails) {
 if(($elem.ToLower() -eq $email.ToLower())){
 $contactAlreadyAdded = $true
 Write-Host ($global:counter)"/"($totalItems) "SKIPPED " $name.PadRight(25," ") "-" $email
 return;
 }
 }
if(!$contactAlreadyAdded ) {
 $newcontact = $contacts.Items.Add()
 $newcontact.FullName = $name
 $newcontact.Email1Address = $email
 $newcontact.Save()
 $global:alreadyAddedEmails += $email
 Write-Host ($global:counter)"/"($totalItems) "ADDED " $name.PadRight(25," ") "-" $email
 }
}
# Loop through all emails in SentItems
$sentItems.Items | % {

#Loop through each recipient
 $_.Recipients | %{
 AddToSuggestedContactsIfNotAlreadyAdded $_.Name $_.Address
 }
 $global:counter = $global:counter + 1
}
Write-Host "Done!"
$outlook.Quit()