Public/Install-VSO.ps1

function Install-VSO {
    # .ExternalHelp VSO-help.xml
    [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')]
    param(
        [ValidateNotNullOrEmpty()][string]$Path,
        [ValidateSet('CurrentUser','AllUsers')][string]$Scope,
        [switch]$AllUsers,
        [ValidateNotNullOrEmpty()][string]$Version,
        [switch]$Prerelease,
        [ValidateNotNullOrEmpty()][string]$AssetName,
        [switch]$Force, [switch]$Quiet,
        [ValidateNotNullOrEmpty()][string]$Language,
        [switch]$PassThru
    )
    $context=New-VSOContext $Language -Quiet:$Quiet
    Assert-VSOQuietConfirmation $context $PSBoundParameters
    Assert-VSOPlatform $context
    if ($Version) { $null=ConvertTo-VSOVersion $Version $context }
    if ($Quiet -or ($Force -and -not $PSBoundParameters.ContainsKey('Confirm'))) { $ConfirmPreference='None' }
    $options=Resolve-VSOInstallOptions $context $Path $Scope -AllUsers:$AllUsers -Preview:$WhatIfPreference
    if (-not $PSCmdlet.ShouldProcess($options.Path,$context.Text.Install)) { return }
    $release=Get-VSORelease $context $Version -Prerelease:$Prerelease -AssetName $AssetName
    if ($options.Scope -eq 'AllUsers' -and -not (Test-VSOAdministrator)) {
        $arguments=@{ Path=$options.Path; Scope='AllUsers'; Version=$release.Version; Prerelease=[bool]$Prerelease; Language=$context.Language; Force=[bool]$Force; AssetName=$release.AssetName }
        $result=Invoke-VSOElevation 'Install-VSO' $arguments $context
    } else { $result=Invoke-VSOInstallTransaction $options $release $context -Force:$Force }
    if ($PassThru) { $result } elseif (-not $Quiet) { Write-Information $context.Text.Installed -InformationAction Continue }
}