Public/Get-ADComputerSite.ps1

Function Get-ADComputerSite() {
    <#
        .SYNOPSIS
        This function will attempt to discover the Active Directory site for the computer calling the function. If it fails the
        function will throw an error.
 
        .DESCRIPTION
        This function uses the .net class System.DirectoryServices.ActiveDirectory.ActiveDirectorySite to request the AD site. The returned data is then validated before being returned.
 
        .INPUTS
        No inputs are required
 
        .OUTPUTS
        This function will return a string containing the AD site name for the requesting machine or will throw an error if this cannot be discovered.
 
        .EXAMPLE
        ps_Module_ActiveDirectoryTools
 
        $sDomainController = Get-ADComputerSite
 
        .NOTES
        MVogwell - October 2022 - Version 1.0
 
        Version history:
            1.0 - Initial tested release
    #>


    [CmdletBinding()]
    param ()

    # This function attempts to discover the AD site of the local computer. It will throw an error if the AD site could not be found

    $ErrorActionPreference = "Stop"
    $sRtnSite = ""

    try {
        Write-Verbose "*** Attempting to discover computer site"

        # Request the information using System.DirectoryServices.ActiveDirectory
        $sRtnSite = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite().Name

        Write-Verbose "`t+++ SUCCESS :: Site - $sRtnSite"
    }
    catch { # on error throw another error with more information
        $sErrMsg = ("Failed to discover computer site. Error: " + (($Global:Error[0].exception).toString()).replace("`r"," ").replace("`n"," "))

        Write-Verbose "`t--- FAILED :: $sErrMsg"

        throw $sErrMsg
    }

    # Check that a site value was discovered
    if ([string]::IsNullOrEmpty($sRtnSite) -eq $true) {
        throw "No site has been discovered. No error was returned"
    }

    return $sRtnSite
}