Get the download url of the latest GitHub release using PowerShell

When we want to download the latest version of a GitHub release, we often do it manually from GitHub.com, but there are times when we need this to be an automatic process, either because we must do it on many computers or should it be done without any user interaction. For these scenarios, we can make use of the following PowerShell script:

function Get-Last-GitHub-Release-Url {
  [CmdletBinding()]
  param(
    [Parameter(Mandatory = $TRUE)]
    [string]
    $GitHubRepository,

    [Parameter(Mandatory = $TRUE)]
    [string]
    $FilenamePattern
  )

  $releasesUri = "https://api.github.com/repos/$GitHubRepository/releases/latest";
  $response = Invoke-RestMethod -Method "GET" -Uri $releasesUri;
  $assets = $response.assets;
  $lastRelease = $assets | Where-Object "name" -Match "$FilenamePattern";
  return $lastRelease.browser_download_url;
}

This function receives 2 parameters:

  1. GitHubRepository

    This is the repository identifier, we can get it from the repository webpage, for example:

    In the repository:

    https://github.com/gohugoio/hugo/

    The identifier is:

    gohugoio/hugo

  2. FilenamePattern

    This is the filename pattern of the file that we want to download, for example:

    Open the releases section of the repository https://github.com/gohugoio/hugo/releases/latest:

    We will see a list of all the files of that release, something like this:

    Assets
    │── hugo_0.105.0_linux-amd64.tar.gz
    │── hugo_0.105.0_openbsd-amd64.tar.gz
    │── hugo_0.105.0_windows-amd64.zip
    │── hugo_0.105.0_windows-arm64.zip
    │── hugo_extended_0.105.0_linux-amd64.tar.gz
    │── hugo_extended_0.105.0_openbsd-amd64.tar.gz
    │── hugo_extended_0.105.0_windows-amd64.zip
    │── hugo_extended_0.105.0_windows-arm64.zip
    

    So, if I want to get the url of the release for Windows x64:

    hugo_extended_0.105.0_windows-amd64.zip

    Just replace the version of the file with a “.” (dot/period) metacharacter:

    hugo_extended_(.+)_windows-amd64.zip

And that’s all, now we can use the PowerShell function to get the download url of the release of that GitHub repository:

Get-Last-GitHub-Release-Url -GitHubRepository "gohugoio/hugo" -FilenamePattern "hugo_extended_(.+)_windows-amd64.zip";