Get-GitPubRelease.ps1

function Get-GitPubRelease {
    <#
    .SYNOPSIS
        Gets GitHub Releases as Posts
    .DESCRIPTION
        Gets GitHub Releases as Posts.
        The release content will be considered the body of the post.
    #>

    [Reflection.AssemblyMetaData("GitPub.Source",$true)]        
    param(      
    # The GitHub Username or Organization.
    [Alias('Owner')]
    [string]
    $UserName,
    # The repository
    [Parameter(Mandatory)]
    [Alias('Repo')]
    [string]
    $Repository,
    # One or more tags used for releases.
    # By default, `release`.
    [string[]]
    $ReleaseTag = 'release',
    # The GitHub Access token.
    # If this is not provided, $env:GITHUB_TOKEN is present, $env:GITHUB_TOKEN will be used.
    [Alias('PersonalAccessToken','GitHubPat', 'PAT')]
    [string]
    $GitHubAccessToken
    )
    process {
        $invokeSplat = @{
            Headers = @{}            
        }
        if (-not $GitHubAccessToken -and $env:GITHUB_TOKEN) {
            $GitHubAccessToken = $env:GITHUB_TOKEN
        }
        if ($GitHubAccessToken) {
            $invokeSplat.Headers.Authentication = "Bearer $gitHubAccessToken"
        }
        if ($Repository -like '*/*' -and -not $UserName) {
            $UserName, $Repository = $Repository -split '\/', 2
        }
        if (-not $UserName) {
            Write-Error "Must Provide -UserName or provide -Repository in the form username/repository"
            return
        }
        
        $releases =
            Invoke-RestMethod ('https://api.github.com/repos/',$UserName,'/',$repository,'/releases' -join '') @invokeSplat
        foreach ($rel in $releases) {
            $rel | Add-Member NoteProperty 'Tags' @($ReleaseTag) -Force
            $rel.pstypenames.clear()
            $rel.pstypenames.add('GitPub.Post.Release')
            $rel.pstypenames.add('GitPub.Post')
            $rel       
        }
    }
}