2023-08-18 10:13:05 -07:00
|
|
|
# Source: https://gist.github.com/ScottHutchinson/b22339c3d3688da5c9b477281e258400
|
|
|
|
# Based on http://nuts4.net/post/automated-download-and-installation-of-visual-studio-extensions-via-powershell
|
|
|
|
|
|
|
|
param([String] $PackageName)
|
|
|
|
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
|
|
|
|
$baseProtocol = "https:"
|
|
|
|
$baseHostName = "marketplace.visualstudio.com"
|
|
|
|
|
|
|
|
$Uri = "$($baseProtocol)//$($baseHostName)/items?itemName=$($PackageName)"
|
|
|
|
$VsixLocation = "$($env:Temp)\$([guid]::NewGuid()).vsix"
|
|
|
|
|
|
|
|
$VSInstallDir = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service"
|
|
|
|
|
|
|
|
if (-Not $VSInstallDir) {
|
|
|
|
Write-Error "Visual Studio InstallDir registry key missing"
|
|
|
|
Exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
Write-Host "Grabbing VSIX extension at $($Uri)"
|
|
|
|
$HTML = Invoke-WebRequest -Uri $Uri -UseBasicParsing -SessionVariable session
|
|
|
|
|
|
|
|
Write-Host "Attempting to download $($PackageName)..."
|
|
|
|
$anchor = $HTML.Links |
|
|
|
|
Where-Object { $_.class -eq 'install-button-container' } |
|
|
|
|
Select-Object -ExpandProperty href
|
|
|
|
|
|
|
|
if (-Not $anchor) {
|
|
|
|
Write-Error "Could not find download anchor tag on the Visual Studio Extensions page"
|
|
|
|
Exit 1
|
|
|
|
}
|
|
|
|
Write-Host "Anchor is $($anchor)"
|
|
|
|
$href = "$($baseProtocol)//$($baseHostName)$($anchor)"
|
|
|
|
Write-Host "Href is $($href)"
|
|
|
|
Invoke-WebRequest $href -OutFile $VsixLocation -WebSession $session
|
|
|
|
|
|
|
|
if (-Not (Test-Path $VsixLocation)) {
|
|
|
|
Write-Error "Downloaded VSIX file could not be located"
|
|
|
|
Exit 1
|
|
|
|
}
|
|
|
|
Write-Host "VSInstallDir is $($VSInstallDir)"
|
|
|
|
Write-Host "VsixLocation is $($VsixLocation)"
|
|
|
|
Write-Host "Installing $($PackageName)..."
|
|
|
|
Start-Process -Filepath "$($VSInstallDir)\VSIXInstaller" -ArgumentList "/q /a $($VsixLocation)" -Wait
|
|
|
|
|
|
|
|
Write-Host "Cleanup..."
|
|
|
|
rm $VsixLocation
|
|
|
|
|
|
|
|
Write-Host "Installation of $($PackageName) complete!"
|