quickstarts/microsoft.devcenter/devbox-ready-to-code-image/tools/artifacts/Windows-NodeJS/Windows-NodeJS.ps1 (44 lines of code) (raw):
param(
[string]$Version = "18.20.2",
[bool]$UninstallExistingNodeVersion = $false
)
function Uninstall-ExistingNode {
if ($UninstallExistingNodeVersion) {
Write-Host "Checking for existing Node.js installations..."
$node = Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "Node.js" }
if ($node -ne $null) {
Write-Host "Existing Node.js installation found: $($node.Name), Version: $($node.Version). Uninstalling..."
$uninstallResult = $node.Uninstall()
if ($uninstallResult.ReturnValue -eq 0) {
Write-Host "Successfully uninstalled existing Node.js version."
} else {
Write-Host "Failed to uninstall existing Node.js version. ReturnValue: $($uninstallResult.ReturnValue)"
}
} else {
Write-Host "No existing Node.js installations found."
}
} else {
Write-Host "Skipping uninstallation of existing Node.js versions."
}
}
# Conditional uninstallation based on the UninstallExistingNodeVersion parameter
Uninstall-ExistingNode
# Download and install the Node.js version specified
try {
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
$source = "https://nodejs.org/dist/v$Version/node-v$Version-x64.msi"
$destination = "$env:TEMP\node-$Version-x64.msi"
$InstallerArgs = "/i `"$destination`" /qn"
Write-Host "Downloading NodeJS"
Write-Host "Source: $source"
Write-Host "Destination: $destination"
Write-Host "Downloading Node.js version $Version"
Invoke-WebRequest $source -OutFile $destination
Write-Host "Download Complete, beginning installation..."
Start-Process -FilePath msiexec -ArgumentList $InstallerArgs -Wait -NoNewWindow
Write-Host "Node.js version $Version installation complete."
} catch {
Write-Output $_
Write-Error -Exception $_.Exception -ErrorAction Stop
}