Skip to content

Instantly share code, notes, and snippets.

@azurekid
Last active March 20, 2025 20:00
Show Gist options
  • Save azurekid/ca641c47981cf8074aeaf6218bb9eb58 to your computer and use it in GitHub Desktop.
Save azurekid/ca641c47981cf8074aeaf6218bb9eb58 to your computer and use it in GitHub Desktop.
PowerShell script to download DevOps Extensions from the marketplace as a local file
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true)]
[string] $Publisher,
[Parameter(Mandatory = $true)]
[string] $ExtensionName,
[Parameter(Mandatory = $true)]
[ValidateScript( {
If ($_ -match "^([0-9]+\.[0-9]+\.[0-9]+)$") {
$True
}
else {
Throw "$_ is not a valid version number. Version can only contain digits"
}
})]
[string] $Version,
[Parameter(Mandatory = $true)]
[string] $OutputLocation
)
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
Write-Output "Publisher: $($Publisher)"
Write-Output "Extension name: $($ExtensionName)"
Write-Output "Version: $($Version)"
Write-Output "Output location $($OutputLocation)"
$baseUrl = "https://$($Publisher).gallery.vsassets.io/_apis/public/gallery/publisher/$($Publisher)/extension/$($ExtensionName)/$($Version)/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage"
$outputFile = "$($Publisher)-$($ExtensionName)-$($Version).visx"
if (Test-Path $OutputLocation) {
try {
Write-Output "Retrieving extension..."
[uri]::EscapeUriString($baseUrl) | Out-Null
Invoke-WebRequest -Uri $baseUrl -OutFile "$OutputLocation\$outputFile"
}
catch {
Write-Error "Unable to find the extension in the marketplace"
}
}
else {
Write-Output "The Path $($OutputLocation) does not exist"
}
@l-logan-777
Copy link

l-logan-777 commented Mar 8, 2025 via email

@azurekid
Copy link
Author

It is quiet some time ago when I wrote this script.
If would like to see any features added, please let me know :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment