Public/Get-FileZilla.ps1

Function Get-FileZilla {
    <#
        .NOTES
            Author: Trond Eirik Haavarstein / Iain Brighton
            Twitter: @xenappblog / @iainbrighton
    #>

    [CmdletBinding()]
    [OutputType([System.Management.Automation.PSObject])]
    Param()

    # Get application resource strings from its manifest
    $res = Get-FunctionResource -AppName ("$($MyInvocation.MyCommand)".Split("-"))[1]
    Write-Verbose -Message $res.Name

    try {
        $web = Invoke-WebRequest -Uri $res.Get.Uri -UseBasicParsing -ErrorAction Stop
        $regexMatch = [Regex]::Match($web.Content, '(?<=<p>The latest stable version of FileZilla Client is )\d{1,}\.\d{1,}\.\d{1,}(?=</p>)')
        if ($regexMatch.Success -eq $true) {
            $version = $regexMatch.Value
            foreach ($platform in 'win32', 'win64') {
                ## The link we want is signed - hence the \? match
                $setupRegex = 'FileZilla_{0}_{1}-setup.exe\?' -f $version, $platform
                $web.Links | Where-Object { $_.href -match $setupRegex } |
                ForEach-Object {
                    [PSCustomObject] @{
                        Version  = $version
                        Platform = $platform
                        URI      = $_.href
                    }
                }
            }
        }
    }
    catch {
        Throw "Failed to connect to URL: $url with error $_."
    }
}