Private/ConvertTo-ScriptMessageRecipientObject.ps1

function ConvertTo-ScriptMessageRecipientObject
{
    [CmdletBinding()]
    param(
        [Parameter(
        Mandatory = $true,
        ValueFromPipeline = $true,
        ValueFromPipelineByPropertyName = $true)]
        [AllowEmptyCollection()]
        [AllowNull()]
        [pscustomobject]$Recipient
    )


    begin
    {
        if (([string]::IsNullOrEmpty($Recipient)) -and ($Recipient.Count -lt 1))
        {
            return $null
        }
    }

    process
    {
        [array]$ScriptMessageRecipientObject = foreach ($recipientItem in $Recipient)
        {
            # Check if 'recipientItem' is string (email address, etc.). If it is, turn into a PSobject.
            if ($recipientItem.GetType().Name -eq 'String')
            {
                [PSCustomObject]@{
                    AddressObj = $recipientItem # Don't use 'Address' because it can conflict with the 'Address()' method.
                }
            }
            else # Return item as properly formatted PSObject that includes the 'Name' property.
            {
                if ([string]::IsNullOrEmpty($recipientItem.Name))
                {
                    [PSCustomObject]@{
                        AddressObj = $recipientItem.Address # Don't use 'Address' because it can conflict with the 'Address()' method.
                    }
                }
                else
                {
                    [PSCustomObject]@{
                        Name = $recipientItem.Name
                        AddressObj = $recipientItem.Address # Don't use 'Address' because it can conflict with the 'Address()' method.
                    }
                }
            }
        }
    }

    end
    {
        return $ScriptMessageRecipientObject
    }
}