Download Virtual Package
Download Virtual Package is available as both a pgutil command and an HTTP Request, and will download the package.version.vpack file for a virtual package, or throw error if not a virtual package.
This example downloads version 1.2.3 of a universal package myUniversalPackage, in the group MyGroup, from the feed myUniversalFeed, to C:\ProGet\MyPackage-1.2.3.vpack,
curl -X GET -H "X-ApiKey: abc12345" "https://proget.corp.local/upack/myUniversalFeed/download-vpack/MyGroup/myUniversalPackage/1.2.3" -o "C:\ProGet\MyPackage-1.2.3.vpack"
Parameter Description
| Parameter | Details | 
|---|---|
| group-name | Optional. If not specified, the empty group will be searched. | 
| package-name | Required. | 
| package-version | Optional. | 
HTTP Request Specification
To download a specific virtual package version, simply GET to the URL with a feed name, group name, package name and package version:
GET /upack/«feed-name»/download-vpack/«group-name»/«package-name»/«package-version»
To download the latest version of a virtual package, simply GET to the URL with a feed name, group name and package name:
GET /upack/«feed-name»/download-vpack/«group-name»/«package-name»?latest
Downloading a specific version of a virtual package requires the feed (e.g. myUniversalFeed),  group name (e.g. myGroup), package name (e.g. myVirtualPackage) and version (e.g. 1.2.3):
GET /upack/myUniversalFeed/download-vpack/myGroup/myVirtualPackage/1.2.3
Downloading the latest version of a virtual package requires the feed (e.g. myUniversalFeed),  group name (e.g. myGroup), and package name (e.g. myVirtualPackage):
GET /upack/myUniversalFeed/download-vpack/myGroup/myVirtualPackage?latest
Command Specification (CLI)
The universal vpackage download command is coming soon. Similar to the HTTP Request, it will download the package.version.vpack file for a virtual package.
HTTP Response Specification
| Response | Details | 
|---|---|
| 200 (Success) | will successfully download the virtual package | 
| 400 (Virtual Package Version not Found) | returned if package-versionis not specified, and latest is not specified in the URL | 
| 403 (Unauthorized API Key) | indicates a missing, unknown, or unauthorized API Key | 
| 404 (Virtual Package Not Found) | indicates the specified virtual package does not exist | 
Sample Usage Scripts
Download all versions of a virtual package (Powershell)
This script will download all versions of the virtual package BaseModules.Combined from the universal feed universal-feed to the local folder C:\ProGet\BaseModule Packages
$baseUrl = "https://proget.corp.local"
$apiKey = "a1b2c3d4e5"
$feedName = "universal-feed"
$packageName = "BaseModules.Combined"
$outputFolder = "C:\ProGet\BaseModule Packages"
$listPackagesEndpoint = "$baseUrl/upack/$feedName/versions" + "?name=$packageName"
$downloadPackagesEndpoint = "$baseUrl/upack/$feedName/download-vpack"
$headers = @{"X-ApiKey" = $apiKey}
$listResponse = Invoke-RestMethod -Uri $listPackagesEndpoint -Headers $headers -Method Get
foreach ($package in $listResponse) {
    if ($package.isVirtual -eq $true) {
        $packageVersion = $package.version
        $packageGroup = $package.group
        $downloadUrl = "$downloadPackagesEndpoint/$packageGroup/$packageName/$packageVersion" + "?contentOnly=zip"
        $outputFilePath = Join-Path $outputFolder "$packageName-$packageVersion.vpack"
        Invoke-WebRequest -Uri $downloadUrl -Headers $headers -OutFile $outputFilePath
        Write-Host "Downloaded: $outputFilePath"
    }
}
Download all virtual package (Powershell)
This script will download all virtual packages from the universal feed universal-feed to the local folder C:\ProGet\Virtual Packages
$baseUrl = "https://proget.corp.local"
$apiKey = "a1b2c3d4e5"
$feedName = "universal-feed"
$outputFolder = "C:\ProGet\Virtual Packages"
$listPackagesEndpoint = "$baseUrl/upack/$feedName/versions"
$downloadPackagesEndpoint = "$baseUrl/upack/$feedName/download-vpack"
$headers = @{"X-ApiKey" = $apiKey}
$listResponse = Invoke-RestMethod -Uri $listPackagesEndpoint -Headers $headers -Method Get
foreach ($package in $listResponse) {
    if ($package.isVirtual -eq $true) {
        $packageName = $package.name
        $packageVersion = $package.version
        $packageGroup = $package.group
        $downloadUrl = "$downloadPackagesEndpoint/$packageGroup/$packageName/$packageVersion" + "?contentOnly=zip"
        $outputFilePath = Join-Path $outputFolder "$packageName-$packageVersion.vpack"
        Invoke-WebRequest -Uri $downloadUrl -Headers $headers -OutFile $outputFilePath
        Write-Host "Downloaded: $outputFilePath"
    }
}