Public/Get-WindowsADActivationObject.ps1

#Requires -Version 5

function Get-WindowsADActivationObject
{
    [OutputType([PSCustomObject])]
    [CmdletBinding(PositionalBinding = $false)]
    param(
        [string]$Name,
        [string]$DistinguishedName,
        [string]$DirectoryServer,
        [PSCredential]$DirectoryCredential
    )

    if ($PSBoundParameters.ContainsKey('Name') -and $PSBoundParameters.ContainsKey('DistinguishedName'))
    {
        throw 'Specify either Name or DistinguishedName, not both.'
    }

    $contextParams = @{}
    if ($PSBoundParameters.ContainsKey('DirectoryServer')) { $contextParams['Server'] = $DirectoryServer }
    if ($PSBoundParameters.ContainsKey('DirectoryCredential')) { $contextParams['Credential'] = $DirectoryCredential }
    $context = Get-ADActivationContext @contextParams

    $lookupParams = @{ Context = $context }
    if ($PSBoundParameters.ContainsKey('Name')) { $lookupParams['Name'] = $Name }
    if ($PSBoundParameters.ContainsKey('DistinguishedName')) { $lookupParams['DistinguishedName'] = $DistinguishedName }
    if ($PSBoundParameters.ContainsKey('DirectoryServer')) { $lookupParams['Server'] = $DirectoryServer }
    if ($PSBoundParameters.ContainsKey('DirectoryCredential')) { $lookupParams['Credential'] = $DirectoryCredential }

    Get-ADActivationObjectRecord @lookupParams
}