Src/Private/Get-AbrADDuplicateObject.ps1

function Get-AbrADDuplicateObject {
    <#
    .SYNOPSIS
    Used by As Built Report to retrieve Microsoft AD Domain Duplicate Objects information.
    .DESCRIPTION
 
    .NOTES
        Version: 0.9.2
        Author: Jonathan Colon
        Twitter: @jcolonfzenpr
        Github: rebelinux
    .EXAMPLE
 
    .LINK
 
    #>

    [CmdletBinding()]
    param (
        [Parameter (
            Position = 0,
            Mandatory)]
        [string]
        $Domain
    )

    begin {
        Write-PScriboMessage "Collecting duplicate Objects information on $Domain."
    }

    process {
        if ($HealthCheck.Domain.DuplicateObject) {
            try {
                $Objects = Get-WinADDuplicateObject -Domain $Domain -Credential $Credential
                if ($Objects) {
                    Section -ExcludeFromTOC -Style NOTOCHeading4 'Duplicate Objects' {
                        Paragraph "The following section details Duplicate Objects discovered on Domain $($Domain.ToString().ToUpper())."
                        BlankLine
                        $OutObj = @()
                        foreach ($Object in $Objects) {
                            try {
                                $inObj = [ordered] @{
                                    'Name' = $Object.Name
                                    'Created' = $Object.WhenCreated.ToString("yyyy:MM:dd")
                                    'Changed' = $Object.WhenChanged.ToString("yyyy:MM:dd")
                                    'Conflict Changed' = $Object.ConflictWhenChanged.ToString("yyyy:MM:dd")
                                }
                                $OutObj += [pscustomobject](ConvertTo-HashToYN $inObj)

                                if ($HealthCheck.Domain.DuplicateObject) {
                                    $OutObj | Set-Style -Style Warning
                                }
                            } catch {
                                Write-PScriboMessage -IsWarning "$($_.Exception.Message) (Duplicate Object Item)"
                            }
                        }

                        $TableParams = @{
                            Name = "Duplicate Object - $($Domain.ToString().ToUpper())"
                            List = $false
                            ColumnWidths = 40, 20, 20, 20
                        }

                        if ($Report.ShowTableCaptions) {
                            $TableParams['Caption'] = "- $($TableParams.Name)"
                        }
                        $OutObj | Table @TableParams
                        Paragraph "Health Check:" -Bold -Underline
                        BlankLine
                        Paragraph {
                            Text "Corrective Actions:" -Bold
                            Text "Ensure there aren't any duplicate objects in the Active Directory. Duplicate objects can cause various issues such as authentication problems, replication conflicts, and administrative overhead. It is recommended to regularly audit and clean up any duplicate objects to maintain a healthy and efficient Active Directory environment."
                        }
                    }
                } else {
                    Write-PScriboMessage "No Duplicate object information found in $Domain, Disabling this section."
                }
            } catch {
                Write-PScriboMessage -IsWarning "$($_.Exception.Message) (Duplicate Object Table)"
            }
        }
    }

    end {}

}