functions/contacts/Search-EXCContactsForCCNumbers.ps1

function Search-EXCContactsForCCNumbers
{
<#
    .SYNOPSIS
        Search Contacts in a Contact folder in a Mailbox using the Exchange Web Services API
     
    .DESCRIPTION
        Searches Contact in a Contact folder in a Mailbox using the Exchange Web Services API
         
        Requires the EWS Managed API from https://www.microsoft.com/en-us/download/details.aspx?id=42951
     
    .PARAMETER MailboxName
        A description of the MailboxName parameter.
     
    .PARAMETER Credentials
        A description of the Credentials parameter.
     
    .PARAMETER Folder
        A description of the Folder parameter.
     
    .PARAMETER useImpersonation
        A description of the useImpersonation parameter.
     
    .EXAMPLE
        PS C:\> Search-EXCContactsForCCNumbers -MailboxName 'value1' -Credentials $Credentials
#>

    [CmdletBinding()]
    param (
        [Parameter(Position = 0, Mandatory = $true)]
        [string]
        $MailboxName,
        
        [Parameter(Position = 1, Mandatory = $false)]
        [System.Management.Automation.PSCredential]
        $Credentials,
        
        [Parameter(Position = 2, Mandatory = $false)]
        [string]
        $Folder,
        
        [Parameter(Position = 3, Mandatory = $false)]
        [switch]
        $useImpersonation,

        [Parameter(Position = 4, Mandatory = $true)][String]$CrediCardValdatorDLLPath,

        [Parameter(Position = 5, Mandatory = $False)]
        [switch]
        $ModernAuth,
        
        [Parameter(Position = 6, Mandatory = $False)]
        [String]
        $ClientId

    )
    Begin
    {
        $Script:rptCollection = @()
        import-module path $CrediCardValdatorDLLPath
        #Connect
        $service = Connect-EXCExchange -MailboxName $MailboxName -Credential $Credentials -ModernAuth:$ModernAuth.IsPresent -ClientId $ClientId
        if ($useImpersonation.IsPresent)
        {
            $service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $MailboxName)
        }
        $folderid = New-Object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Contacts, $MailboxName)
        if ($Folder)
        {
            $Contacts = Get-EXCContactFolder -Service $service -FolderPath $Folder -SmptAddress $MailboxName
        }
        else
        {
            $Contacts = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $folderid)
        }
        if ($service.URL)
        {
            $SfSearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.ItemSchema]::ItemClass, "IPM.Contact")
            #Define ItemView to retrive just 1000 Items
            $ivItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000)
            $fiItems = $null
            do
            {
                $fiItems = $service.FindItems($Contacts.Id, $SfSearchFilter, $ivItemView)
                if ($fiItems.Items.Count -gt 0)
                {
                    $psPropset = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
                    [Void]$service.LoadPropertiesForItems($fiItems, $psPropset)
                    foreach ($Contact in $fiItems.Items)
                    {
                        if ($Contact -is [Microsoft.Exchange.WebServices.Data.Contact])
                        {
                            $DnName = $Contact.DisplayName
                            Write-Verbose "Processing $DnName"
                            $BusinssPhone = $Contact.PhoneNumbers[[Microsoft.Exchange.WebServices.Data.PhoneNumberKey]::BusinessPhone]
                            $MobilePhone = $Contact.PhoneNumbers[[Microsoft.Exchange.WebServices.Data.PhoneNumberKey]::MobilePhone]
                            $HomePhone = $Contact.PhoneNumbers[[Microsoft.Exchange.WebServices.Data.PhoneNumberKey]::HomePhone]
                            if ($BusinssPhone -ne $null)
                            {
                                Write-Verbose 'Check BusinessPhone'
                                $CheckObj = Find-CCNumber -Number $BusinssPhone -Property "BusinessPhone" -MailboxName $MailboxName -DisplayName $DnName
                            }
                            if ($MobilePhone -ne $null)
                            {
                                Write-Verbose 'Check MobilePhone'
                                $CheckObj = Find-CCNumber -Number $MobilePhone -Property "MobilePhone" -MailboxName $MailboxName -DisplayName $DnName
                                
                            }
                            if ($HomePhone -ne $null)
                            {
                                Write-Verbose 'Check HomePhone'
                                $CheckObj = Find-CCNumber -Number $HomePhone -Property "HomePhone" -MailboxName $MailboxName -DisplayName $DnName
                                
                            }
                            $Email1 = $Contact.EmailAddresses[[Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress1]
                            $Email2 = $Contact.EmailAddresses[[Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress2]
                            $Email3 = $Contact.EmailAddresses[[Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress3]
                            if ($Email1 -ne $null)
                            {
                                Write-Verbose 'Check Email1'
                                if (![string]::IsNullOrEmpty($Email1.Address))
                                {
                                    if ([String]::IsNullOrEmpty($DnName))
                                    {
                                        $DnName = $Email1.Address
                                    }
                                    $CheckObj = Find-CCNumber -Number $Email1.Address -Property "Email" -MailboxName $MailboxName -DisplayName $DnName
                                }
                                
                            }
                            if ($Email2 -ne $null)
                            {
                                Write-Verbose 'Check Email2'
                                if (![string]::IsNullOrEmpty($Email2.Address))
                                {
                                    $CheckObj = Find-CCNumber -Number $Email2.Address -Property "Email2" -MailboxName $MailboxName -DisplayName $DnName
                                }
                                
                            }
                            if ($Email3 -ne $null)
                            {
                                Write-Verbose 'Check Email3'
                                if (![string]::IsNullOrEmpty($Email3.Address))
                                {
                                    $CheckObj = Find-CCNumber -Number $Email3.Address -Property "Email3" -MailboxName $MailboxName -DisplayName $DnName
                                }
                            }
                            
                        }
                    }
                }
                $ivItemView.Offset += $fiItems.Items.Count
            }
            while ($fiItems.MoreAvailable -eq $true)
            
        }
        write-output $Script:rptCollection
    }
}