Public/Get-AdSite.ps1

function Get-AdSite {
    <#
        .SYNOPSIS
            Retrieves all Active Directory sites from the current forest.
 
        .DESCRIPTION
            This function retrieves all Active Directory sites from the current forest using
            the .NET DirectoryServices API. It returns an array of site objects containing
            information such as name, subnets, site links, and other site-related properties.
 
            This function is useful for inventory, documentation, and network topology analysis.
 
        .INPUTS
            None
            This function does not accept pipeline input.
 
        .OUTPUTS
            System.Array
            Returns an array of DirectoryServices.ActiveDirectory.ActiveDirectorySite objects.
 
        .EXAMPLE
            Get-AdSite
 
            Returns all AD sites in the current forest.
 
        .EXAMPLE
            Get-AdSite | Select-Object Name, Subnets
 
            Returns all AD sites with only their names and associated subnets.
 
        .NOTES
            Used Functions:
                Name ║ Module/Namespace
                ═══════════════════════════════════════╬══════════════════════════════
                Import-MyModule ║ EguibarIT
                Get-FunctionDisplay ║ EguibarIT
                Write-Verbose ║ Microsoft.PowerShell.Utility
                Forest.GetCurrentForest ║ System.DirectoryServices.ActiveDirectory
 
        .NOTES
            Version: 1.1
            DateModified: 22/May/2025
            LastModifiedBy: Vicente Rodriguez Eguibar
                            vicente@eguibar.com
                            Eguibar IT
                            http://www.eguibarit.com
 
        .LINK
            https://github.com/vreguibar/EguibarIT/blob/main/Public/Get-AdSite.ps1
 
        .COMPONENT
            Active Directory
 
        .ROLE
            Network Administration
 
        .FUNCTIONALITY
            Site Management
    #>

    [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Medium')]
    [OutputType([array])]

    Param ()

    Begin {
        $txt = ($Variables.Header -f
            (Get-Date).ToString('dd/MMM/yyyy'),
            $MyInvocation.Mycommand,
            (Get-FunctionDisplay -HashTable $PsBoundParameters -Verbose:$False)
        )
        Write-Verbose -Message $txt

        ##############################
        # Module imports

        Import-MyModule -Name 'ServerManager' -SkipEditionCheck -Verbose:$false
        Import-MyModule -Name 'ActiveDirectory' -Verbose:$false

        ##############################
        # Variables Definition
    } #end Begin

    Process {
        Write-Verbose -Message "Get AD Site List `r"
        [array] $ADSites = [DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites
    } #end Process

    End {
        $txt = ($Variables.Footer -f $MyInvocation.InvocationName,
            'getting AD Sites.'
        )
        Write-Verbose -Message $txt

        Return $ADSites
    } #end End
} #end Function