Public/Get-ADUserByName.ps1

function Get-ADUserByName {
    [CmdletBinding(SupportsShouldProcess)]
    Param (
    [Parameter(Mandatory,ValueFromPipeline)]
    [string]$Name,
    [string]$Domain,
    [object]$Creds
    )

    process {
    if ($Name -notmatch '^\s+$|^$' -and $Name -ne $Null) {
        $NameWildcard = '*' + $Name + '*'
        if ($Domain -And $Creds) {
        $Params = @{
            Server    = $Domain
            Credential    = $Creds
            Properties    = '*'
        }
        if ($ADUser = Get-ADUser @Params -Filter {Name -eq $Name}) {
            return $ADUser
        } elseif ($ADUser = Get-ADUser @Params -Filter {Name -like $NameWildcard}) {
            return $ADUser
        } else {
            Write-Verbose "Couldn't find $Name in $Domain AD."
        }
        } else {
        if ($ADUser = Get-ADUser -Filter {Name -eq $Name} -Server $ADGlobalCatalog) {
            $ADUser | Get-ADUserAllProperties
        } elseif ($ADUser = Get-ADUser -Filter {Name -like $NameWildcard} -Server $ADGlobalCatalog) {
            $ADUser | Get-ADUserAllProperties
        } else {
            Write-Verbose "Couldn't find $Name in AD."
        }
        }
    } else {
        throw "Name parameter is an empty string."
    }
    }
}