early-access version 2853
This commit is contained in:
125
externals/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1
vendored
Executable file
125
externals/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1
vendored
Executable file
@@ -0,0 +1,125 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets a random file path in the temp directory.
|
||||
|
||||
.DESCRIPTION
|
||||
Get-TempFilePath takes an extension, and returns a path with a random
|
||||
filename component in the temporary directory with that extension.
|
||||
|
||||
.PARAMETER Extension
|
||||
The extension to use for the path.
|
||||
#>
|
||||
Function Get-TempFilePath {
|
||||
Param(
|
||||
[String]$Extension
|
||||
)
|
||||
|
||||
if ([String]::IsNullOrWhiteSpace($Extension)) {
|
||||
throw 'Missing Extension'
|
||||
}
|
||||
|
||||
$tempPath = [System.IO.Path]::GetTempPath()
|
||||
$tempName = [System.IO.Path]::GetRandomFileName() + '.' + $Extension
|
||||
return Join-Path $tempPath $tempName
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Writes a message to the screen depending on ExitCode.
|
||||
|
||||
.DESCRIPTION
|
||||
Since msiexec can return either 0 or 3010 successfully, in both cases
|
||||
we write that installation succeeded, and which exit code it exited with.
|
||||
If msiexec returns anything else, we write an error.
|
||||
|
||||
.PARAMETER ExitCode
|
||||
The exit code that msiexec returned.
|
||||
#>
|
||||
Function PrintMsiExitCodeMessage {
|
||||
Param(
|
||||
$ExitCode
|
||||
)
|
||||
|
||||
# 3010 is probably ERROR_SUCCESS_REBOOT_REQUIRED
|
||||
if ($ExitCode -eq 0 -or $ExitCode -eq 3010) {
|
||||
Write-Host "Installation successful! Exited with $ExitCode."
|
||||
}
|
||||
else {
|
||||
Write-Error "Installation failed! Exited with $ExitCode."
|
||||
throw
|
||||
}
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Install a .msi file.
|
||||
|
||||
.DESCRIPTION
|
||||
InstallMSI takes a url where an .msi lives, and installs that .msi to the system.
|
||||
|
||||
.PARAMETER Name
|
||||
The name of the thing to install.
|
||||
|
||||
.PARAMETER Url
|
||||
The URL at which the .msi lives.
|
||||
#>
|
||||
Function InstallMSI {
|
||||
Param(
|
||||
[String]$Name,
|
||||
[String]$Url
|
||||
)
|
||||
|
||||
try {
|
||||
Write-Host "Downloading $Name..."
|
||||
[string]$msiPath = Get-TempFilePath -Extension 'msi'
|
||||
curl.exe -L -o $msiPath -s -S $Url
|
||||
Write-Host "Installing $Name..."
|
||||
$args = @('/i', $msiPath, '/norestart', '/quiet', '/qn')
|
||||
$proc = Start-Process -FilePath 'msiexec.exe' -ArgumentList $args -Wait -PassThru
|
||||
PrintMsiExitCodeMessage $proc.ExitCode
|
||||
}
|
||||
catch {
|
||||
Write-Error "Failed to install $Name! $($_.Exception.Message)"
|
||||
throw
|
||||
}
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Unpacks a zip file to $Dir.
|
||||
|
||||
.DESCRIPTION
|
||||
InstallZip takes a URL of a zip file, and unpacks the zip file to the directory
|
||||
$Dir.
|
||||
|
||||
.PARAMETER Name
|
||||
The name of the tool being installed.
|
||||
|
||||
.PARAMETER Url
|
||||
The URL of the zip file to unpack.
|
||||
|
||||
.PARAMETER Dir
|
||||
The directory to unpack the zip file to.
|
||||
#>
|
||||
Function InstallZip {
|
||||
Param(
|
||||
[String]$Name,
|
||||
[String]$Url,
|
||||
[String]$Dir
|
||||
)
|
||||
|
||||
try {
|
||||
Write-Host "Downloading $Name..."
|
||||
[string]$zipPath = Get-TempFilePath -Extension 'zip'
|
||||
curl.exe -L -o $zipPath -s -S $Url
|
||||
Write-Host "Installing $Name..."
|
||||
Expand-Archive -Path $zipPath -DestinationPath $Dir -Force
|
||||
}
|
||||
catch {
|
||||
Write-Error "Failed to install $Name! $($_.Exception.Message)"
|
||||
throw
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user