Public/Install-UipathcliTool.ps1

function Install-UipathcliTool {
<#
.SYNOPSIS
    Downloads and installs the uipathcli Go binary into the user profile
    (%LOCALAPPDATA%\cpmf\tools\uipathcli). No admin rights required. Idempotent.
 
.PARAMETER ToolBase
    Root directory for all installed tools. Defaults to %LOCALAPPDATA%\cpmf\tools.
 
.LINK
    https://github.com/UiPath/uipathcli
#>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [string]$ToolBase = (Join-Path $env:LOCALAPPDATA 'cpmf\tools')
    )

    Set-StrictMode -Version Latest
    $ErrorActionPreference = 'Stop'

    $p = Get-CpmfUipsToolPaths -ToolBase $ToolBase

    if (Test-Path $p.UipathcliExe) {
        Write-Verbose "[Install] uipathcli already installed — skipping"
        return
    }

    if (-not $PSCmdlet.ShouldProcess($p.UipathcliDir, 'Download uipathcli binary')) { return }

    Write-Progress -Activity 'CpmfUipsPack: install' -Status 'Downloading uipathcli …'
    Write-Verbose "[Install] Installing uipathcli into $($p.UipathcliDir) ..."

    $null = New-Item -ItemType Directory -Path $p.UipathcliDir -Force

    # Asset name pattern from https://github.com/UiPath/uipathcli/releases
    # Windows amd64 zip containing uipath.exe
    $downloadUrl = 'https://github.com/UiPath/uipathcli/releases/latest/download/uipathcli-windows-amd64.zip'
    $zipPath     = Join-Path $p.UipathcliDir 'uipathcli-windows-amd64.zip'

    try {
        Invoke-WebRequest `
            -Uri        $downloadUrl `
            -OutFile    $zipPath `
            -UseBasicParsing `
            -TimeoutSec 120

        Expand-Archive -Path $zipPath -DestinationPath $p.UipathcliDir -Force
        Remove-Item $zipPath -Force

        if (-not (Test-Path $p.UipathcliExe)) {
            throw "uipathcli download failed — binary not found at $($p.UipathcliExe)"
        }
    } catch {
        Remove-Item $p.UipathcliDir -Recurse -Force -ErrorAction SilentlyContinue
        throw
    }

    $token = '%LOCALAPPDATA%\cpmf\tools\uipathcli'
    if (Add-ToUserPath $token) {
        Write-Verbose "[Install] Added $token to user PATH"
    }

    Write-Progress -Activity 'CpmfUipsPack: install' -Completed
    Write-Verbose "[Install] uipathcli installed at $($p.UipathcliExe)"
}