-
-
Save azurekid/ca641c47981cf8074aeaf6218bb9eb58 to your computer and use it in GitHub Desktop.
[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" | |
} |
The url structure has changed, it is now:
"https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${Publisher}/vsextensions/${ExtensionName}/${Version}/vspackage"
Great script, @azurekid! I'd like to thank @paviad for modernizing it. Additionally, to allow for versions in the format of d+.d+.d+ (not just d.d.d), it's a good idea to change line 12 from If ($_ -match "^([0-9].[0-9].[0-9])") {
to If ($_ -match "^([0-9]+\.[0-9]+\.[0-9]+)$") {
.
I ran the script in Bash using the following command:
pwsh /home/user/scripts/script.ps1 -Publisher "GitHub" -ExtensionName "copilot" -Version "1.96.259" -OutputLocation "/home/user/downloads"
It worked flawlessly!
https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${Publisher}/vsextensions/${ExtensionName}/${Version}/vspackage
Hi thanks for the feedback, and sorry for not coming back earlier to this.
I have updated the url as you have suggested in your comments but that results in an error message that the package could not be found.
Can you add a PR on you r suggestion, maybe I am doing something wrong ;-)
Great script, @azurekid! I'd like to thank @paviad for modernizing it. Additionally, to allow for versions in the format of d+.d+.d+ (not just d.d.d), it's a good idea to change line 12 from
If ($_ -match "^([0-9].[0-9].[0-9])") {
toIf ($_ -match "^([0-9]+\.[0-9]+\.[0-9]+)$") {
.I ran the script in Bash using the following command:
pwsh /home/user/scripts/script.ps1 -Publisher "GitHub" -ExtensionName "copilot" -Version "1.96.259" -OutputLocation "/home/user/downloads"It worked flawlessly!
hi @uyriq
It has been quiet a while when I wrote this little script, but happy it still seems to work.
I have added your suggestion to the code
Kind Regards,
Rogier
Download DevOps extensions
This PowerShell script can be used to download a .visx file from the Visual Studio Marketplace to a local machine
The required properties for downloading the .visx file can be found in the URL and properties of the extension.
The first part of the URL shows the publisher and the second part the name of the extension file
The version number can be found in the properties field under more info:
Usage
Get-Extension -Publisher 'gep13' -ExtensionName 'chocolatey-azuredevops' -Version '0.2.0' -OutputLocation 'C:\Users\Azurekid'