Private/Get-ADUserDetails.ps1

function Get-ADUserDetails {

    ################################################################################
    ##### #####
    ##### Find AD User Details based on Identifier (SID or DN) #####
    ##### #####
    ################################################################################

    Param(
        [Parameter(Mandatory)]
        [string]$Identifier,
        [switch]$SearchBySID,
        [switch]$SearchByDN   
    )

    $CurrentFunction = Get-FunctionName
    Write-Log -Message "### Start Function $CurrentFunction ###"
    $StartRunTime = (Get-Date).ToString($Script:DateFormatLog)
    #################### main code | out- host #####################

    If ($SearchBySID) {
    
        $sidObj = [System.Security.Principal.SecurityIdentifier]$Identifier
        $domainSid = $sidObj.AccountDomainSid.Value
        $ForestDomains = Get-DomainsInForest
        $Domain = $ForestDomains  | Where-Object { $_.DomainSID -eq $domainSid }
        $server = $Domain.FQDN
    }
    elseif ($SearchByDN) {

        $server = (($Identifier -split ',') |
            Where-Object { $_ -like 'DC=*' } |
            ForEach-Object { ($_ -split '=', 2)[1] }) -join '.'
    }
    else {
        Write-Log -Message " >> No search method specified. Please use either -SearchBySID or -SearchByDN." -Level ERROR
        return
    }
    
    Try {
        $results = Get-ADUser -Identity $Identifier -Properties * -Server $server -ErrorAction stop
        $Details = [PSCustomObject]@{
            UPN            = $results.UserPrincipalName
            SID            = $results.objectSid.Value
            FQDN           = $results.CanonicalName.Split("/")[0]
            CN             = $results.CanonicalName
            samaccountname = $results.SamAccountName
            Enabled        = $results.Enabled
            DN             = $results.DistinguishedName
        } 
    }
    Catch {
        Write-Log -Message " >> No user found for: $Identifier" -Level WARN
        $Details = [PSCustomObject]@{
            UPN            = "Account Not Found"
            SID            = "Account Not Found"
            FQDN           = "Account Not Found"
            CN             = "Account Not Found"
            samaccountname = "Account Not Found"
            DN             = $Identifier
        }
    }  

    Write-Log -Message " >> Identified Account: $($Details.CN) based on identifier: $Identifier"
    ######################## main code ############################
    $runtime = Get-RunTime -StartRunTime $StartRunTime
    Write-Log -Message " Run Time: $runtime [h] ###"
    Write-Log -Message "### End Function $CurrentFunction ###"
    return $Details
}