Outlook/Exchange Birthday Fix

Outlook/Exchange Birthday Fix

$contactItems = @()

$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
$contactFolders = ($namespace.Folders | where {$_.Folderpath -like "*Outlook-Datendatei*"}).Folders

foreach($contactFolder in $contactFolders){
    foreach($contact in $contactFolder.Items){
        
        try{
            $contactBirthdayOld = $null
            $contactBirthdayOld = $contact.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3A420040") #PidTagBirthday
        }catch{
            # Nothing to do here
        }
   

        if($contactBirthdayOld -ne $null -AND $contactBirthdayOld -notlike ""){
             
            $contactCreationTime = $contact.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x30070040") #PR_CREATION_TIME
            $contactBirthdayNew = $contact.Birthday

            try{
                $contact.Birthday = $contactBirthdayNew
                $contact.Save()

                Write-Host "Birthday for $($contact.FullName) has been configured successfully." -ForegroundColor Green
                
                $contactItems += [PSCustomObject]@{
                    ContactObject = $contact
                    FullName = $contact.FullName
                    CreationTime = $contactCreationTime
                    Birthday = $contactBirthdayNew
                    PidTagBirthday = $contactBirthdayOld
                    NewBirthDayDate = $contactBirthdayNew    
                }
                
                Start-Sleep -Milliseconds 50
            }catch{
                Write-Host "Failed to set birthday for $($contact.Fullname)!" -ForegroundColor Red
            }

        }else{
            Write-Host "$($contact.FullName) no birthday configured!" -ForegroundColor Gray
        }
    }
}

$contactItems | ft Fullname, CreationTime, Birthday, PidTagBirthday, NewBirthdayDate 

You may also like...