mirror of
https://github.com/actions/runner-images-sangeeth.git
synced 2025-12-28 04:20:23 +08:00
Inital commit.
This commit is contained in:
51
images/win/scripts/Installers/Download-ToolCache.ps1
Normal file
51
images/win/scripts/Installers/Download-ToolCache.ps1
Normal file
@@ -0,0 +1,51 @@
|
||||
################################################################################
|
||||
## File: Download-ToolCache.ps1
|
||||
## Desc: Download tool cache
|
||||
################################################################################
|
||||
|
||||
Function InstallTool
|
||||
{
|
||||
Param
|
||||
(
|
||||
[System.Object]$ExecutablePath
|
||||
)
|
||||
|
||||
Write-Host $ExecutablePath.DirectoryName
|
||||
Set-Location -Path $ExecutablePath.DirectoryName
|
||||
Get-Location | Write-Host
|
||||
if (Test-Path 'tool.zip')
|
||||
{
|
||||
Expand-Archive 'tool.zip' -DestinationPath '.'
|
||||
}
|
||||
cmd.exe /c 'install_to_tools_cache.bat'
|
||||
}
|
||||
|
||||
$SourceUrl = "https://vstsagenttools.blob.core.windows.net/tools"
|
||||
|
||||
$Dest = "C:/"
|
||||
|
||||
$Path = "hostedtoolcache/windows"
|
||||
|
||||
$env:Path = "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy;" + $env:Path
|
||||
|
||||
Write-Host "Started AzCopy from $SourceUrl to $Dest"
|
||||
|
||||
AzCopy /Source:$SourceUrl /Dest:$Dest /S /V /Pattern:$Path
|
||||
|
||||
$ToolsDirectory = $Dest + $Path
|
||||
|
||||
$current = Get-Location
|
||||
Set-Location -Path $ToolsDirectory
|
||||
|
||||
Get-ChildItem -Recurse -Depth 4 -Filter install_to_tools_cache.bat | ForEach-Object {
|
||||
#In order to work correctly Python 3.4 x86 must be installed after x64, this is achieved by current toolcache catalog structure
|
||||
InstallTool($_)
|
||||
}
|
||||
|
||||
Set-Location -Path $current
|
||||
|
||||
setx AGENT_TOOLSDIRECTORY $ToolsDirectory /M
|
||||
|
||||
#junction point from the previous Python2 directory to the toolcache Python2
|
||||
$python2Dir = (Get-Item -Path ($ToolsDirectory + '/Python/2.7*/x64')).FullName
|
||||
cmd.exe /c mklink /d "C:\Python27amd64" "$python2Dir"
|
||||
13
images/win/scripts/Installers/Enable-DeveloperMode.ps1
Normal file
13
images/win/scripts/Installers/Enable-DeveloperMode.ps1
Normal file
@@ -0,0 +1,13 @@
|
||||
################################################################################
|
||||
## File: Enable-DeveloperMode.ps1
|
||||
## Desc: Enables Developer Mode by toggling registry setting. Developer Mode is required to enable certain tools (e.g. WinAppDriver).
|
||||
################################################################################
|
||||
|
||||
# Create AppModelUnlock if it doesn't exist, required for enabling Developer Mode
|
||||
$RegistryKeyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
|
||||
if (-not(Test-Path -Path $RegistryKeyPath)) {
|
||||
New-Item -Path $RegistryKeyPath -ItemType Directory -Force
|
||||
}
|
||||
|
||||
# Add registry value to enable Developer Mode
|
||||
New-ItemProperty -Path $RegistryKeyPath -Name AllowDevelopmentWithoutDevLicense -PropertyType DWORD -Value 1
|
||||
34
images/win/scripts/Installers/Finalize-VM.ps1
Normal file
34
images/win/scripts/Installers/Finalize-VM.ps1
Normal file
@@ -0,0 +1,34 @@
|
||||
################################################################################
|
||||
## File: Finalize-VM.ps1
|
||||
## Desc: Clean up folders temp folders after installs to save space
|
||||
################################################################################
|
||||
|
||||
Write-Host "Cleanup WinSxS"
|
||||
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
|
||||
|
||||
$ErrorActionPreference = 'silentlycontinue'
|
||||
|
||||
Write-Host "Clean up various directories"
|
||||
@(
|
||||
"C:\\Recovery",
|
||||
"$env:windir\\logs",
|
||||
"$env:windir\\winsxs\\manifestcache",
|
||||
"$env:windir\\Temp",
|
||||
"$env:windir\\Installer",
|
||||
"$env:TEMP"
|
||||
) | ForEach-Object {
|
||||
if (Test-Path $_) {
|
||||
Write-Host "Removing $_"
|
||||
try {
|
||||
Takeown /d Y /R /f $_
|
||||
Icacls $_ /GRANT:r administrators:F /T /c /q 2>&1 | Out-Null
|
||||
Remove-Item $_ -Recurse -Force | Out-Null
|
||||
}
|
||||
catch { $global:error.RemoveAt(0) }
|
||||
}
|
||||
}
|
||||
|
||||
$winInstallDir = "$env:windir\\Installer"
|
||||
New-Item -Path $winInstallDir -ItemType Directory -Force
|
||||
|
||||
$ErrorActionPreference = 'Continue'
|
||||
6
images/win/scripts/Installers/Install-7zip.ps1
Normal file
6
images/win/scripts/Installers/Install-7zip.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-7zip.ps1
|
||||
## Desc: Install 7zip
|
||||
################################################################################
|
||||
|
||||
choco install 7zip.install -y
|
||||
12
images/win/scripts/Installers/Install-AzureCli.ps1
Normal file
12
images/win/scripts/Installers/Install-AzureCli.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
################################################################################
|
||||
## File: Install-AzureCli.ps1
|
||||
## Desc: Install Azure CLI
|
||||
################################################################################
|
||||
|
||||
choco install azure-cli -y
|
||||
|
||||
$AzureCliExtensionPath = Join-Path $Env:CommonProgramFiles 'AzureCliExtensionDirectory'
|
||||
New-Item -ItemType "directory" -Path $AzureCliExtensionPath
|
||||
|
||||
[Environment]::SetEnvironmentVariable("AZURE_EXTENSION_DIR", $AzureCliExtensionPath, [System.EnvironmentVariableTarget]::Machine)
|
||||
$Env:AZURE_EXTENSION_DIR = $AzureCliExtensionPath
|
||||
@@ -0,0 +1,8 @@
|
||||
####################################################################################
|
||||
## File: Install-AzureCosmosDbEmulator.ps1
|
||||
## Desc: Install Azure CosmosDb Emulator
|
||||
####################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
Install-MSI -MsiUrl "https://aka.ms/cosmosdb-emulator" -MsiName "AzureCosmosDBEmulator.msi"
|
||||
6
images/win/scripts/Installers/Install-AzureDevOpsCli.ps1
Normal file
6
images/win/scripts/Installers/Install-AzureDevOpsCli.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-AzureDevOpsCli.ps1
|
||||
## Desc: Install Azure DevOps CLI
|
||||
################################################################################
|
||||
|
||||
az extension add -n azure-devops
|
||||
197
images/win/scripts/Installers/Install-AzureModules.ps1
Normal file
197
images/win/scripts/Installers/Install-AzureModules.ps1
Normal file
@@ -0,0 +1,197 @@
|
||||
################################################################################
|
||||
## File: Install-AzureModules.ps1
|
||||
## Desc: Install Azure PowerShell modules
|
||||
################################################################################
|
||||
|
||||
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
||||
|
||||
function Download-Zip
|
||||
{
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[Parameter(
|
||||
Mandatory = $true
|
||||
)]
|
||||
[string]
|
||||
$BlobUri
|
||||
)
|
||||
|
||||
Write-Host "Downloading the zip from blob: '$BlobUri'"
|
||||
$fileName = "azureps_" + "$(Get-Random)" + ".zip"
|
||||
$targetLocation = Join-Path $ENV:Temp -ChildPath $fileName
|
||||
Write-Host "Download target location: '$targetLocation'"
|
||||
$webClient = New-Object Net.WebClient
|
||||
$null = $webClient.DownloadFileAsync($BlobUri, $targetLocation)
|
||||
while ($webClient.IsBusy) { }
|
||||
Write-Host "Download complete. Target Location: '$targetLocation'"
|
||||
return $targetLocation
|
||||
}
|
||||
|
||||
function Extract-Zip
|
||||
{
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[Parameter(
|
||||
Mandatory = $true
|
||||
)]
|
||||
[string]
|
||||
$ZipFilePath,
|
||||
|
||||
[Parameter(
|
||||
Mandatory = $true
|
||||
)]
|
||||
[string]
|
||||
$TargetLocation
|
||||
)
|
||||
|
||||
Write-Host "Expanding the Zip File: '$ZipFilePath'. Target: '$TargetLocation'"
|
||||
$null = [System.IO.Compression.ZipFile]::ExtractToDirectory($ZipFilePath, $TargetLocation)
|
||||
Write-Host "Extraction completed successfully."
|
||||
}
|
||||
|
||||
Set-PSRepository -InstallationPolicy Trusted -Name PSGallery
|
||||
|
||||
# We try to detect the whether Azure PowerShell is installed using .msi file. If it is installed, we find it's version, then it needs to be uninstalled manually (because the uninstallation requires the PowerShell session to be closed)
|
||||
$regKey = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
|
||||
$installedApplications = Get-ItemProperty -Path $regKey
|
||||
$SdkVersion = ($installedApplications | Where-Object { $_.DisplayName -and $_.DisplayName.toLower().Contains("microsoft azure powershell") } | Select-Object -First 1).DisplayVersion
|
||||
|
||||
if($SdkVersion -eq $null)
|
||||
{
|
||||
Write-Host "No .msi Installation Present"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "An Azure PowerShell Installation through installer has been detected. Please close this powershell session and manually uninstall the Azure PowerShell from the Add or Remove Programs in the Control Panel. Then, rerun this script from an Admin PowerShell"
|
||||
throw "An Azure PowerShell Installation through installer has been detected. Please close this powershell session and manually uninstall the Azure PowerShell from the Add or Remove Programs in the Control Panel. Then, rerun this script from an Admin PowerShell"
|
||||
}
|
||||
|
||||
# We will try to uninstall any installation of Azure PowerShell
|
||||
|
||||
$modules = Get-Module -Name Azure -ListAvailable
|
||||
Write-Host "The Azure Modules initially present are:"
|
||||
$modules | Select-Object Name,Version,Path | Format-Table
|
||||
|
||||
foreach($module in $modules)
|
||||
{
|
||||
# add logging for telling what module we are working on now
|
||||
if(Test-Path -LiteralPath $module.Path)
|
||||
{
|
||||
try
|
||||
{
|
||||
Uninstall-Module -Name Azure -RequiredVersion $module.Version.tostring() -Force
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Host "The Uninstallation of Azure Module version: $($module.Version.tostring()) failed with the error: $($_.Exception.Message) . Please Check if there isn't any other PowerShell session open."
|
||||
throw $_.Exception.Message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$modules = Get-Module -Name AzureRM -ListAvailable
|
||||
Write-Host "The AzureRM Modules initially present are:"
|
||||
$modules | Select-Object Name,Version,Path | Format-Table
|
||||
|
||||
foreach($module in $modules)
|
||||
{
|
||||
# add logging for telling what module we are working on now
|
||||
if(Test-Path -LiteralPath $module.Path)
|
||||
{
|
||||
try
|
||||
{
|
||||
Uninstall-Module -Name AzureRM -RequiredVersion $module.Version.tostring() -Force
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Host "The Uninstallation of AzureRM Module version: $($module.Version.tostring()) failed with the error: $($_.Exception.Message) . Please Check if there isn't any other PowerShell session open."
|
||||
throw $_.Exception.Message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#after this, the only installations available through a Get-Module cmdlet should be nothing
|
||||
|
||||
$modules = Get-Module -Name Azure -ListAvailable
|
||||
|
||||
foreach($module in $modules)
|
||||
{
|
||||
Write-Host "Module found: $($module.Name) Module Version: $($module.Version)"
|
||||
if($module.Version.ToString() -ne " ")
|
||||
{
|
||||
Write-Host "Another installation of Azure module is detected with version $($module.Version.ToString()) at path: $($module.Path)"
|
||||
throw "Azure module uninstallation unsuccessful"
|
||||
}
|
||||
}
|
||||
|
||||
$modules = Get-Module -Name AzureRM -ListAvailable
|
||||
|
||||
foreach($module in $modules)
|
||||
{
|
||||
write-host "Module found: $($module.Name) Module Version: $($module.Version)"
|
||||
if($module.Version.ToString() -ne " ")
|
||||
{
|
||||
Write-Host "Another installation of AzureRM module is detected with version $($module.Version.ToString()) at path: $($module.Path)"
|
||||
throw "AzureRM module uninstallation unsuccessful"
|
||||
}
|
||||
}
|
||||
|
||||
#### NOW The correct Modules need to be saved in C:\Modules
|
||||
|
||||
if($(Test-Path -LiteralPath "C:\Modules") -eq $true)
|
||||
{
|
||||
Write-Host "C:\Modules directory is already present. Beginning to clear it up completely"
|
||||
Remove-Item -Path "C:\Modules" -Recurse -Force
|
||||
}
|
||||
|
||||
mkdir "C:\Modules"
|
||||
|
||||
$directoryListing = Get-ChildItem -Path "C:\Modules"
|
||||
|
||||
if($directoryListing.Length -gt 0)
|
||||
{
|
||||
Write-Host "C:\Modules was not deleted properly. It still has the following contents:"
|
||||
$directoryListing
|
||||
}
|
||||
else {
|
||||
Write-Host "The Directory is clean. There are no contents present in it"
|
||||
}
|
||||
|
||||
# Download and unzip the stored AzurePSModules from the vstsagentools public blob
|
||||
$extractLocation = "C:\Modules"
|
||||
$azurePsUri = @(
|
||||
"https://vstsagenttools.blob.core.windows.net/tools/azurepowershellmodules/AzurePSModules.M157.20190808.27979.zip",
|
||||
"https://vstsagenttools.blob.core.windows.net/tools/azurepowershellmodules/AzureRmPSModules.M157.20190808.27379.zip",
|
||||
"https://vstsagenttools.blob.core.windows.net/tools/azurepowershellmodules/AzPSModules.M158.20190903.19326.zip"
|
||||
)
|
||||
|
||||
$azureRMModulePath = "C:\Modules\azurerm_2.1.0"
|
||||
$azureModulePath = "C:\Modules\azure_2.1.0"
|
||||
$finalPath = ""
|
||||
$environmentPSModulePath = [Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
|
||||
$existingPaths = $environmentPSModulePath -split ';' -replace '\\$',''
|
||||
|
||||
if ($existingPaths -notcontains $azureRMModulePath) {
|
||||
$finalPath = $azureRMModulePath
|
||||
}
|
||||
|
||||
if ($existingPaths -notcontains $azureModulePath) {
|
||||
if($finalPath -ne "") {
|
||||
$finalPath = $finalPath + ";" + $azureModulePath
|
||||
}
|
||||
else {
|
||||
$finalPath = $azureModulePath
|
||||
}
|
||||
}
|
||||
|
||||
if($finalPath -ne "") {
|
||||
[Environment]::SetEnvironmentVariable("PSModulePath", $finalPath + ";" + $env:PSModulePath, "Machine")
|
||||
}
|
||||
|
||||
$env:PSModulePath = $env:PSModulePath.TrimStart(';')
|
||||
|
||||
foreach ($uri in $azurePsUri)
|
||||
{
|
||||
$targetFile = Download-Zip -BlobUri $uri
|
||||
Extract-Zip -ZipFilePath $targetFile -TargetLocation $extractLocation
|
||||
}
|
||||
45
images/win/scripts/Installers/Install-Boost.ps1
Normal file
45
images/win/scripts/Installers/Install-Boost.ps1
Normal file
@@ -0,0 +1,45 @@
|
||||
################################################################################
|
||||
## File: Install-Boost.ps1
|
||||
## Desc: Install boost using tool cache
|
||||
################################################################################
|
||||
|
||||
$ToolCache = 'C:\hostedtoolcache\windows\boost'
|
||||
$BoostDirectory = Join-Path -Path $env:ProgramFiles -ChildPath "Boost"
|
||||
$BoostVersionsToInstall = $env:BOOST_VERSIONS.split(',')
|
||||
$BoostDefault = $env:BOOST_DEFAULT
|
||||
|
||||
foreach($BoostVersion in $BoostVersionsToInstall)
|
||||
{
|
||||
$ZipName = Join-Path -Path $ToolCache -ChildPath "boost_${BoostVersion}_msvc-14.1.zip"
|
||||
|
||||
if (-Not (Test-Path $ZipName))
|
||||
{
|
||||
Write-Host "$ZipName not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Expanding $ZipName"
|
||||
|
||||
$BoostInstallationDir = Join-Path -Path $BoostDirectory -ChildPath $BoostVersion
|
||||
# Expand-Archive slower for 70% than 7z
|
||||
& "$env:ProgramFiles\7-Zip\7z.exe" x $ZipName -o"$BoostDirectory" -y
|
||||
|
||||
$EnvBoostPath = "BOOST_ROOT_{0}" -f ($BoostVersion.Replace('.', '_'))
|
||||
setx $EnvBoostPath $BoostInstallationDir /M | Out-Null
|
||||
|
||||
if ($BoostVersion -eq $BoostDefault)
|
||||
{
|
||||
Write-Host "Adding Boost $BoostVersion to the path..."
|
||||
# Add the Boost binaries to the path
|
||||
Add-MachinePathItem $BoostInstallationDir | Out-Null
|
||||
# Set the BOOSTROOT environment variable
|
||||
setx BOOST_ROOT $BoostInstallationDir /M | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
# Removing boost cache folder
|
||||
Write-Host "Removing boost cache folder"
|
||||
if (Test-Path $ToolCache)
|
||||
{
|
||||
Remove-Item -Path $ToolCache -Force -Recurse
|
||||
}
|
||||
26
images/win/scripts/Installers/Install-Chrome.ps1
Normal file
26
images/win/scripts/Installers/Install-Chrome.ps1
Normal file
@@ -0,0 +1,26 @@
|
||||
################################################################################
|
||||
## File: Install-Chrome.ps1
|
||||
## Desc: Install Google Chrome
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$temp_install_dir = 'C:\Windows\Installer'
|
||||
New-Item -Path $temp_install_dir -ItemType Directory -Force
|
||||
|
||||
Install-MSI -MsiUrl "https://seleniumwebdrivers.blob.core.windows.net/knownchromeversion/googlechromestandaloneenterprise64.msi" -MsiName "googlechromestandaloneenterprise64.msi"
|
||||
|
||||
New-NetFirewallRule -DisplayName "BlockGoogleUpdate" -Direction Outbound -Action Block -Program "C:\Program Files (x86)\Google\Update\GoogleUpdate.exe"
|
||||
|
||||
Stop-Service -Name gupdate -Force
|
||||
Set-Service -Name gupdate -StartupType "Disabled"
|
||||
Stop-Service -Name gupdatem -Force
|
||||
Set-Service -Name gupdatem -StartupType "Disabled"
|
||||
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Google\Update" -Force
|
||||
New-ItemProperty "HKLM:\SOFTWARE\Policies\Google\Update" -Name "AutoUpdateCheckPeriodMinutes" -Value 00000000 -Force
|
||||
New-ItemProperty "HKLM:\SOFTWARE\Policies\Google\Update" -Name "UpdateDefault" -Value 00000000 -Force
|
||||
New-ItemProperty "HKLM:\SOFTWARE\Policies\Google\Update" -Name "DisableAutoUpdateChecksCheckboxValue" -Value 00000001 -Force
|
||||
New-ItemProperty "HKLM:\SOFTWARE\Policies\Google\Update" -Name "Update{8A69D345-D564-463C-AFF1-A69D9E530F96}" -Value 00000000 -Force
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Google\Chrome" -Force
|
||||
New-ItemProperty "HKLM:\SOFTWARE\Policies\Google\Chrome" -Name "DefaultBrowserSettingEnabled" -Value 00000000 -Force
|
||||
24
images/win/scripts/Installers/Install-CloudFoundryCli.ps1
Normal file
24
images/win/scripts/Installers/Install-CloudFoundryCli.ps1
Normal file
@@ -0,0 +1,24 @@
|
||||
################################################################################
|
||||
## File: Install-CloudFoundryCli.ps1
|
||||
## Desc: Install Cloud Foundry CLI
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers
|
||||
|
||||
# Download the latest cf cli exe
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://packages.cloudfoundry.org/stable?release=windows64-exe&source=github" -OutFile cf-cli.zip
|
||||
|
||||
# Create directory for cf cli
|
||||
$cf_cli_path = "C:\cf-cli"
|
||||
New-Item -Path $cf_cli_path -ItemType Directory -Force
|
||||
|
||||
# Extract the zip archive
|
||||
Write-Host "Extracting cf cli..."
|
||||
Expand-Archive -Path cf-cli.zip -DestinationPath $cf_cli_path -Force
|
||||
|
||||
# Add cf to path
|
||||
Add-MachinePathItem $cf_cli_path
|
||||
|
||||
# Delete the cfl-cli zip archive
|
||||
Write-Host "Deleting downloaded archive of cf cli"
|
||||
Remove-Item cf-cli.zip
|
||||
6
images/win/scripts/Installers/Install-Cmake.ps1
Normal file
6
images/win/scripts/Installers/Install-Cmake.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-Cmake.ps1
|
||||
## Desc: Install Cmake
|
||||
################################################################################
|
||||
|
||||
choco install cmake.install -y --installargs 'ADD_CMAKE_TO_PATH=""System""'
|
||||
16
images/win/scripts/Installers/Install-ContainersFeature.ps1
Normal file
16
images/win/scripts/Installers/Install-ContainersFeature.ps1
Normal file
@@ -0,0 +1,16 @@
|
||||
################################################################################
|
||||
## File: Install-ContainersFeature.ps1
|
||||
## Desc: Install Windows container features.
|
||||
## Must be an independent step becuase it requires a machine restart
|
||||
## before we can continue.
|
||||
################################################################################
|
||||
|
||||
Write-Host "Install Containers feature"
|
||||
Install-WindowsFeature -Name Containers
|
||||
|
||||
if ((GWMI Win32_Processor).VirtualizationFirmwareEnabled[0] -and (GWMI Win32_Processor).SecondLevelAddressTranslationExtensions[0]) {
|
||||
Write-Host "Install Hyper-V feature"
|
||||
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools
|
||||
} else {
|
||||
Write-Host "Skipping installation of Hyper-V feature"
|
||||
}
|
||||
10
images/win/scripts/Installers/Install-DACFx.ps1
Normal file
10
images/win/scripts/Installers/Install-DACFx.ps1
Normal file
@@ -0,0 +1,10 @@
|
||||
####################################################################################
|
||||
## File: Install-DACFx.ps1
|
||||
## Desc: Install SQL Server® Data-Tier Application Framework (DACFx) for Windows
|
||||
####################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$exitcode = Install-MSI -MsiUrl "https://download.microsoft.com/download/f/1/9/f19eaee6-0728-4a0b-9755-9808acc8af0b/EN/x64/DacFramework.msi" -MsiName "DacFramework.msi"
|
||||
|
||||
exit $exitcode
|
||||
16
images/win/scripts/Installers/Install-Docker.ps1
Normal file
16
images/win/scripts/Installers/Install-Docker.ps1
Normal file
@@ -0,0 +1,16 @@
|
||||
################################################################################
|
||||
## File: Install-Docker.ps1
|
||||
## Desc: Install Docker.
|
||||
## Must be an independent step becuase it requires a restart before we
|
||||
## can continue.
|
||||
################################################################################
|
||||
|
||||
Set-PSRepository -InstallationPolicy Trusted -Name PSGallery
|
||||
Write-Host "Install-Module DockerProvider"
|
||||
Install-Module DockerMsftProvider -Force
|
||||
|
||||
Write-Host "Install-Package Docker"
|
||||
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
|
||||
Start-Service docker
|
||||
|
||||
choco install docker-compose -y
|
||||
113
images/win/scripts/Installers/Install-DotnetSDK.ps1
Normal file
113
images/win/scripts/Installers/Install-DotnetSDK.ps1
Normal file
@@ -0,0 +1,113 @@
|
||||
################################################################################
|
||||
## File: Install-DotnetSDK.ps1
|
||||
## Desc: Install all released versions of the dotnet sdk and populate package
|
||||
## cache. Should run after VS and Node
|
||||
################################################################################
|
||||
|
||||
# ensure temp
|
||||
New-Item -Path C:\Temp -Force -ItemType Directory
|
||||
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor "Tls12"
|
||||
|
||||
$templates = @(
|
||||
'console',
|
||||
'mstest',
|
||||
'web',
|
||||
'mvc',
|
||||
'webapi'
|
||||
)
|
||||
|
||||
function InstallSDKVersion (
|
||||
$sdkVersion
|
||||
)
|
||||
{
|
||||
if (!(Test-Path -Path "C:\Program Files\dotnet\sdk\$sdkVersion"))
|
||||
{
|
||||
Write-Host "Installing dotnet $sdkVersion"
|
||||
.\dotnet-install.ps1 -Architecture x64 -Version $sdkVersion -InstallDir $(Join-Path -Path $env:ProgramFiles -ChildPath 'dotnet')
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Sdk version $sdkVersion already installed"
|
||||
}
|
||||
|
||||
# Fix for issue 1276. This will be fixed in 3.1.
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dotnet/sdk/82bc30c99f1325dfaa7ad450be96857a4fca2845/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.ImportPublishProfile.targets" -outfile "C:\Program Files\dotnet\sdk\$sdkVersion\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.ImportPublishProfile.targets"
|
||||
|
||||
# warm up dotnet for first time experience
|
||||
$templates | ForEach-Object {
|
||||
$template = $_
|
||||
$projectPath = Join-Path -Path C:\temp -ChildPath $template
|
||||
New-Item -Path $projectPath -Force -ItemType Directory
|
||||
Push-Location -Path $projectPath
|
||||
& $env:ProgramFiles\dotnet\dotnet.exe new globaljson --sdk-version "$sdkVersion"
|
||||
& $env:ProgramFiles\dotnet\dotnet.exe new $template
|
||||
Pop-Location
|
||||
Remove-Item $projectPath -Force -Recurse
|
||||
}
|
||||
}
|
||||
|
||||
function InstallAllValidSdks()
|
||||
{
|
||||
Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases-index.json' -UseBasicParsing -OutFile 'releases-index.json'
|
||||
$dotnetChannels = Get-Content -Path 'releases-index.json' | ConvertFrom-Json
|
||||
|
||||
# Consider all channels except preview/eol channels.
|
||||
# Sort the channels in ascending order
|
||||
$dotnetChannels = $dotnetChannels.'releases-index' | Where-Object { !$_."support-phase".Equals('preview') -and !$_."support-phase".Equals('eol') } | Sort-Object { [Version] $_."channel-version" }
|
||||
|
||||
# Download installation script.
|
||||
Invoke-WebRequest -Uri 'https://dot.net/v1/dotnet-install.ps1' -UseBasicParsing -OutFile 'dotnet-install.ps1'
|
||||
|
||||
ForEach ($dotnetChannel in $dotnetChannels)
|
||||
{
|
||||
$channelVersion = $dotnetChannel.'channel-version';
|
||||
Invoke-WebRequest -Uri $dotnetChannel.'releases.json' -UseBasicParsing -OutFile "releases-$channelVersion.json"
|
||||
$currentReleases = Get-Content -Path "releases-$channelVersion.json" | ConvertFrom-Json
|
||||
# filtering out the preview/rc releases
|
||||
$currentReleases = $currentReleases.'releases' | Where-Object { !$_.'release-version'.Contains('-') } | Sort-Object { [Version] $_.'release-version' }
|
||||
ForEach ($release in $currentReleases)
|
||||
{
|
||||
if ($release.'sdks'.Count -gt 0)
|
||||
{
|
||||
Write-Host 'Found sdks property in release: ' + $release.'release-version' + 'with sdks count: ' + $release.'sdks'.Count
|
||||
|
||||
|
||||
# Remove duplicate entries & preview/rc version from download list
|
||||
# Sort the sdks on version
|
||||
$sdks = @($release.'sdk');
|
||||
$sdks += $release.'sdks' | Where-Object { !$_.'version'.Contains('-') -and !$_.'version'.Equals($release.'sdk'.'version') }
|
||||
$sdks = $sdks | Sort-Object { [Version] $_.'version' }
|
||||
|
||||
ForEach ($sdk in $sdks)
|
||||
{
|
||||
InstallSDKVersion -sdkVersion $sdk.'version'
|
||||
}
|
||||
}
|
||||
elseif (!$release.'sdk'.'version'.Contains('-'))
|
||||
{
|
||||
$sdkVersion = $release.'sdk'.'version'
|
||||
InstallSDKVersion -sdkVersion $sdkVersion
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function RunPostInstallationSteps()
|
||||
{
|
||||
Add-MachinePathItem "C:\Program Files\dotnet"
|
||||
# Run script at startup for all users
|
||||
$cmdDotNetPath = @"
|
||||
@echo off
|
||||
SETX PATH "%USERPROFILE%\.dotnet\tools;%PATH%"
|
||||
"@
|
||||
|
||||
$cmdPath = "C:\Program Files\dotnet\userpath.bat"
|
||||
$cmdDotNetPath | Out-File -Encoding ascii -FilePath $cmdPath
|
||||
|
||||
# Update Run key to run a script at logon
|
||||
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "DOTNETUSERPATH" -Value $cmdPath
|
||||
}
|
||||
|
||||
InstallAllValidSdks
|
||||
RunPostInstallationSteps
|
||||
20
images/win/scripts/Installers/Install-Firefox.ps1
Normal file
20
images/win/scripts/Installers/Install-Firefox.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
################################################################################
|
||||
## File: Install-Firefox.ps1
|
||||
## Desc: Install Mozilla Firefox
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$temp_install_dir = 'C:\Windows\Installer'
|
||||
New-Item -Path $temp_install_dir -ItemType Directory -Force
|
||||
|
||||
Install-EXE -Url "https://seleniumwebdrivers.blob.core.windows.net/knownfirefoxversion/FirefoxSetup.exe" -Name "FirefoxSetup.exe" -ArgumentList "-ms"
|
||||
|
||||
$path = '{0}\Program Files\Mozilla Firefox\' -f $env:SystemDrive;
|
||||
New-Item -path $path -Name 'mozilla.cfg' -Value '//
|
||||
pref("browser.shell.checkDefaultBrowser", false);
|
||||
pref("app.update.enabled", false);' -ItemType file -force
|
||||
|
||||
$path = '{0}\Program Files\Mozilla Firefox\defaults\pref\' -f $env:SystemDrive;
|
||||
New-Item -path $path -Name 'local-settings.js' -Value 'pref("general.config.obscure_value", 0);
|
||||
pref("general.config.filename", "mozilla.cfg");' -ItemType file -force
|
||||
18
images/win/scripts/Installers/Install-Git.ps1
Normal file
18
images/win/scripts/Installers/Install-Git.ps1
Normal file
@@ -0,0 +1,18 @@
|
||||
################################################################################
|
||||
## File: Install-Git.ps1
|
||||
## Desc: Install Git for Windows
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers
|
||||
|
||||
# Install the latest version of Git which is bundled with Git LFS.
|
||||
# See https://chocolatey.org/packages/git
|
||||
choco install git -y --package-parameters="/GitAndUnixToolsOnPath /WindowsTerminal /NoShellIntegration"
|
||||
|
||||
# Disable GCM machine-wide
|
||||
[Environment]::SetEnvironmentVariable("GCM_INTERACTIVE", "Never", [System.EnvironmentVariableTarget]::Machine)
|
||||
|
||||
Add-MachinePathItem "C:\Program Files\Git\mingw64\bin"
|
||||
Add-MachinePathItem "C:\Program Files\Git\usr\bin"
|
||||
Add-MachinePathItem "C:\Program Files\Git\bin"
|
||||
exit 0
|
||||
6
images/win/scripts/Installers/Install-GitVersion.ps1
Normal file
6
images/win/scripts/Installers/Install-GitVersion.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-GitVersion.ps1
|
||||
## Desc: Install GitVersion
|
||||
################################################################################
|
||||
|
||||
choco install gitversion.portable -y
|
||||
71
images/win/scripts/Installers/Install-Go.ps1
Normal file
71
images/win/scripts/Installers/Install-Go.ps1
Normal file
@@ -0,0 +1,71 @@
|
||||
################################################################################
|
||||
## File: Install-Go.ps1
|
||||
## Desc: Install Go
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
function Install-GoVersion
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$goVersion,
|
||||
[Switch]$addToDefaultPath
|
||||
)
|
||||
|
||||
# Download the Go zip archive.
|
||||
Write-Host "Downloading Go $goVersion..."
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://dl.google.com/go/go$goVersion.windows-amd64.zip" -OutFile go$goVersion.windows-amd64.zip
|
||||
|
||||
# Extract the zip archive. It contains a single directory named "go".
|
||||
Write-Host "Extracting Go $goVersion..."
|
||||
Expand-Archive -Path go$goVersion.windows-amd64.zip -DestinationPath "C:\" -Force
|
||||
|
||||
# Delete unnecessary files to conserve space
|
||||
Write-Host "Cleaning directories of Go $goVersion..."
|
||||
if (Test-Path "C:\go\doc")
|
||||
{
|
||||
Remove-Item -Recurse -Force "C:\go\doc"
|
||||
}
|
||||
if (Test-Path "C:\go\blog")
|
||||
{
|
||||
Remove-Item -Recurse -Force "C:\go\blog"
|
||||
}
|
||||
|
||||
# Rename the extracted "go" directory to include the Go version number (to support side-by-side versions of Go).
|
||||
$newDirName = "Go$goVersion"
|
||||
Rename-Item -path "C:\go" -newName $newDirName
|
||||
|
||||
# Delete the Go zip archive.
|
||||
Write-Host "Deleting downloaded archive of Go $goVersion..."
|
||||
Remove-Item go$goVersion.windows-a`md64.zip
|
||||
|
||||
# Make this the default version of Go?
|
||||
if ($addToDefaultPath)
|
||||
{
|
||||
Write-Host "Adding Go $goVersion to the path..."
|
||||
# Add the Go binaries to the path.
|
||||
Add-MachinePathItem "C:\$newDirName\bin" | Out-Null
|
||||
# Set the GOROOT environment variable.
|
||||
setx GOROOT "C:\$newDirName" /M | Out-Null
|
||||
}
|
||||
|
||||
# Done
|
||||
Write-Host "Done installing Go $goVersion."
|
||||
return "C:\$newDirName"
|
||||
}
|
||||
|
||||
# Install Go
|
||||
$goVersionsToInstall = $env:GO_VERSIONS.split(",")
|
||||
|
||||
foreach($go in $goVersionsToInstall) {
|
||||
Write-Host "Installing Go ${go}"
|
||||
if($go -eq $env:GO_DEFAULT) {
|
||||
$installDirectory = Install-GoVersion -goVersion $go -addToDefaultPath
|
||||
} else {
|
||||
$installDirectory = Install-GoVersion -goVersion $go
|
||||
}
|
||||
$envName = "GOROOT_{0}_{1}_X64" -f $go.split(".")
|
||||
setx $envName "$installDirectory" /M
|
||||
}
|
||||
6
images/win/scripts/Installers/Install-InnoSetup.ps1
Normal file
6
images/win/scripts/Installers/Install-InnoSetup.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-InnoSetup.ps1
|
||||
## Desc: Install Inno Setup
|
||||
################################################################################
|
||||
|
||||
choco install innosetup -y
|
||||
98
images/win/scripts/Installers/Install-JavaTools.ps1
Normal file
98
images/win/scripts/Installers/Install-JavaTools.ps1
Normal file
@@ -0,0 +1,98 @@
|
||||
################################################################################
|
||||
## File: Install-JavaTools.ps1
|
||||
## Desc: Install various JDKs and java tools
|
||||
################################################################################
|
||||
|
||||
# Download the Azul Systems Zulu JDKs
|
||||
# See https://www.azul.com/downloads/azure-only/zulu/
|
||||
$azulJDK7Uri = 'https://repos.azul.com/azure-only/zulu/packages/zulu-7/7u232/zulu-7-azure-jdk_7.31.0.5-7.0.232-win_x64.zip'
|
||||
$azulJDK8Uri = 'https://repos.azul.com/azure-only/zulu/packages/zulu-8/8u222/zulu-8-azure-jdk_8.40.0.25-8.0.222-win_x64.zip'
|
||||
$azulJDK11Uri = 'https://repos.azul.com/azure-only/zulu/packages/zulu-11/11.0.4/zulu-11-azure-jdk_11.33.15-11.0.4-win_x64.zip'
|
||||
|
||||
cd $env:TEMP
|
||||
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $azulJDK7Uri -OutFile azulJDK7.zip
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $azulJDK8Uri -OutFile azulJDK8.zip
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $azulJDK11Uri -OutFile azulJDK11.zip
|
||||
|
||||
# Expand the zips
|
||||
Expand-Archive -Path azulJDK7.zip -DestinationPath "C:\Program Files\Java\" -Force
|
||||
Expand-Archive -Path azulJDK8.zip -DestinationPath "C:\Program Files\Java\" -Force
|
||||
Expand-Archive -Path azulJDK11.zip -DestinationPath "C:\Program Files\Java\" -Force
|
||||
|
||||
# Deleting zip folders
|
||||
Remove-Item -Recurse -Force azulJDK7.zip
|
||||
Remove-Item -Recurse -Force azulJDK8.zip
|
||||
Remove-Item -Recurse -Force azulJDK11.zip
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$currentPath = Get-MachinePath
|
||||
|
||||
$pathSegments = $currentPath.Split(';')
|
||||
$newPathSegments = @()
|
||||
|
||||
foreach ($pathSegment in $pathSegments)
|
||||
{
|
||||
if($pathSegment -notlike '*java*')
|
||||
{
|
||||
$newPathSegments += $pathSegment
|
||||
}
|
||||
}
|
||||
|
||||
$java7Installs = Get-ChildItem -Path 'C:\Program Files\Java' -Filter '*azure-jdk*7*' | Sort-Object -Property Name -Descending | Select-Object -First 1
|
||||
$latestJava7Install = $java7Installs.FullName;
|
||||
|
||||
$java8Installs = Get-ChildItem -Path 'C:\Program Files\Java' -Filter '*azure-jdk*8*' | Sort-Object -Property Name -Descending | Select-Object -First 1
|
||||
$latestJava8Install = $java8Installs.FullName;
|
||||
|
||||
$java11Installs = Get-ChildItem -Path 'C:\Program Files\Java' -Filter '*azure-jdk*11*' | Sort-Object -Property Name -Descending | Select-Object -First 1
|
||||
$latestJava11Install = $java11Installs.FullName;
|
||||
|
||||
$newPath = [string]::Join(';', $newPathSegments)
|
||||
$newPath = $latestJava8Install + '\bin;' + $newPath
|
||||
|
||||
Set-MachinePath -NewPath $newPath
|
||||
|
||||
setx JAVA_HOME $latestJava8Install /M
|
||||
setx JAVA_HOME_7_X64 $latestJava7Install /M
|
||||
setx JAVA_HOME_8_X64 $latestJava8Install /M
|
||||
setx JAVA_HOME_11_X64 $latestJava11Install /M
|
||||
|
||||
# Install Java tools
|
||||
# Force chocolatey to ignore dependencies on Ant and Maven or else they will download the Oracle JDK
|
||||
choco install ant -y -i
|
||||
choco install maven -y -i --version=3.6.2
|
||||
choco install gradle -y
|
||||
|
||||
# Move maven variables to Machine. They may not be in the environment for this script so we need to read them from the registry.
|
||||
$userSid = (Get-WmiObject win32_useraccount -Filter "name = '$env:USERNAME' AND domain = '$env:USERDOMAIN'").SID
|
||||
$userEnvironmentKey = 'Registry::HKEY_USERS\' + $userSid + '\Environment'
|
||||
|
||||
$m2_home = (Get-ItemProperty -Path $userEnvironmentKey -Name M2_HOME).M2_HOME
|
||||
$m2 = $m2_home + '\bin'
|
||||
$maven_opts = '-Xms256m'
|
||||
|
||||
$m2_repo = 'C:\ProgramData\m2'
|
||||
New-Item -Path $m2_repo -ItemType Directory -Force
|
||||
|
||||
setx M2 $m2 /M
|
||||
setx M2_HOME $m2_home /M
|
||||
setx M2_REPO $m2_repo /M
|
||||
setx MAVEN_OPTS $maven_opts /M
|
||||
|
||||
# Download cobertura jars
|
||||
$uri = 'https://ayera.dl.sourceforge.net/project/cobertura/cobertura/2.1.1/cobertura-2.1.1-bin.zip'
|
||||
$coberturaPath = "C:\cobertura-2.1.1"
|
||||
|
||||
cd $env:TEMP
|
||||
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $uri -OutFile cobertura.zip
|
||||
|
||||
# Expand the zip
|
||||
Expand-Archive -Path cobertura.zip -DestinationPath "C:\" -Force
|
||||
|
||||
# Deleting zip folder
|
||||
Remove-Item -Recurse -Force cobertura.zip
|
||||
|
||||
setx COBERTURA_HOME $coberturaPath /M
|
||||
6
images/win/scripts/Installers/Install-Jq.ps1
Normal file
6
images/win/scripts/Installers/Install-Jq.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-Jq.ps1
|
||||
## Desc: Install jq
|
||||
################################################################################
|
||||
|
||||
choco install jq -y
|
||||
40
images/win/scripts/Installers/Install-Kind.ps1
Normal file
40
images/win/scripts/Installers/Install-Kind.ps1
Normal file
@@ -0,0 +1,40 @@
|
||||
################################################################################
|
||||
## File: Install-Kind.ps1
|
||||
## Desc: Install Kind
|
||||
################################################################################
|
||||
|
||||
$stableKindTag = "v0.5.1"
|
||||
$tagToUse = $stableKindTag;
|
||||
$destFilePath = "C:\ProgramData\kind"
|
||||
$outFilePath = "C:\ProgramData\kind\kind.exe"
|
||||
|
||||
try
|
||||
{
|
||||
$getkindUri = "https://github.com/kubernetes-sigs/kind/releases/download/$tagToUse/kind-windows-amd64"
|
||||
Write-Host "Downloading kind.exe..."
|
||||
New-Item -Path $destFilePath -ItemType Directory -Force
|
||||
|
||||
Invoke-WebRequest -Uri $getkindUri -OutFile $outFilePath
|
||||
|
||||
Write-Host "Starting Install kind.exe..."
|
||||
$process = Start-Process -FilePath $outFilePath -Wait -PassThru
|
||||
$exitCode = $process.ExitCode
|
||||
|
||||
if ($exitCode -eq 0 -or $exitCode -eq 3010)
|
||||
{
|
||||
Write-Host -Object 'Installation successful'
|
||||
Add-MachinePathItem $destFilePath
|
||||
exit $exitCode
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host -Object "Non zero exit code returned by the installation process : $exitCode."
|
||||
exit $exitCode
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Host -Object "Failed to install the Executable kind.exe"
|
||||
Write-Host -Object $_.Exception.Message
|
||||
exit -1
|
||||
}
|
||||
6
images/win/scripts/Installers/Install-KubernetesCli.ps1
Normal file
6
images/win/scripts/Installers/Install-KubernetesCli.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-KubernetesCli.ps1
|
||||
## Desc: Install KubernetesCli
|
||||
################################################################################
|
||||
|
||||
choco install kubernetes-cli -y
|
||||
10
images/win/scripts/Installers/Install-Mercurial.ps1
Normal file
10
images/win/scripts/Installers/Install-Mercurial.ps1
Normal file
@@ -0,0 +1,10 @@
|
||||
################################################################################
|
||||
## File: Install-Mercurial.ps1
|
||||
## Desc: Install Mercurial
|
||||
################################################################################
|
||||
|
||||
choco install hg -y --version 5.0.0
|
||||
|
||||
$hgPath = "${env:ProgramFiles}\Mercurial\"
|
||||
Add-MachinePathItem $hgPath
|
||||
$env:Path = Get-MachinePath
|
||||
13
images/win/scripts/Installers/Install-MinGW.ps1
Normal file
13
images/win/scripts/Installers/Install-MinGW.ps1
Normal file
@@ -0,0 +1,13 @@
|
||||
################################################################################
|
||||
## File: Install-MinGW.ps1
|
||||
## Desc: Install GNU tools for Windows to C:\tools\mingw64
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
choco install -y mingw
|
||||
|
||||
# Make a copy of mingw32-make.exe to make.exe, which is a more discoverable name
|
||||
# and so the same command line can be used on Windows as on macOS and Linux
|
||||
$path = where.exe mingw32-make.exe | Get-Item
|
||||
Copy-Item -Path $path -Destination (Join-Path $path.Directory 'make.exe')
|
||||
16
images/win/scripts/Installers/Install-Miniconda.ps1
Normal file
16
images/win/scripts/Installers/Install-Miniconda.ps1
Normal file
@@ -0,0 +1,16 @@
|
||||
################################################################################
|
||||
## File: Install-Miniconda.ps1
|
||||
## Desc: Install the latest version of Miniconda and set $env:CONDA
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
# Lock to Miniconda 4.6 until we do the work to run `conda init` for the vsts user
|
||||
# Then we can go back to installing the latest Miniconda
|
||||
# $url = "https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe"
|
||||
$url = "https://repo.continuum.io/miniconda/Miniconda3-4.6.14-Windows-x86_64.exe"
|
||||
$name = $Url.Split('/')[-1]
|
||||
$destination = "C:\Miniconda"
|
||||
|
||||
Install-EXE -Url $url -Name $name -ArgumentList "/S /AddToPath=0 /RegisterPython=0 /D=$destination"
|
||||
Set-SystemVariable -SystemVariable "CONDA" -Value $destination
|
||||
39
images/win/scripts/Installers/Install-MysqlCli.ps1
Normal file
39
images/win/scripts/Installers/Install-MysqlCli.ps1
Normal file
@@ -0,0 +1,39 @@
|
||||
################################################################################
|
||||
## File: Install-MysqlCli.ps1
|
||||
## Desc: Install Mysql CLI
|
||||
################################################################################
|
||||
|
||||
|
||||
## Downloading mysql jar
|
||||
$uri = 'https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip'
|
||||
$mysqlPath = 'C:\mysql-5.7.21-winx64\bin'
|
||||
|
||||
# Installing visual c++ redistibutable package.
|
||||
$InstallerURI = 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe'
|
||||
$InstallerName = 'vcredist_x64.exe'
|
||||
$ArgumentList = ('/install', '/quiet', '/norestart' )
|
||||
|
||||
$exitCode = Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
|
||||
if ($exitCode -eq 0 -or $exitCode -eq 3010)
|
||||
{
|
||||
# MySQL disabled TLS 1.0 support on or about Jul-14-2018. Need to make sure TLS 1.2 is enabled.
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor "Tls12"
|
||||
|
||||
# Get the latest mysql command line tools .
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $uri -OutFile mysql.zip
|
||||
|
||||
# Expand the zip
|
||||
Expand-Archive -Path mysql.zip -DestinationPath "C:\" -Force
|
||||
|
||||
# Deleting zip folder
|
||||
Remove-Item -Recurse -Force mysql.zip
|
||||
|
||||
# Adding mysql in system environment path
|
||||
Add-MachinePathItem $mysqlPath
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $exitCode;
|
||||
}
|
||||
13
images/win/scripts/Installers/Install-NET48.ps1
Normal file
13
images/win/scripts/Installers/Install-NET48.ps1
Normal file
@@ -0,0 +1,13 @@
|
||||
################################################################################
|
||||
## File: Install-NET48.ps1
|
||||
## Desc: Install .NET 4.8
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
# .NET 4.8 Dev pack
|
||||
$InstallerURI = "https://download.visualstudio.microsoft.com/download/pr/7afca223-55d2-470a-8edc-6a1739ae3252/c8c829444416e811be84c5765ede6148/NDP48-DevPack-ENU.exe"
|
||||
$InstallerName = "NDP48-DevPack-ENU.exe"
|
||||
$ArgumentList = ('Setup', '/passive', '/norestart' )
|
||||
|
||||
Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
|
||||
10
images/win/scripts/Installers/Install-NSIS.ps1
Normal file
10
images/win/scripts/Installers/Install-NSIS.ps1
Normal file
@@ -0,0 +1,10 @@
|
||||
################################################################################
|
||||
## File: Install-NSIS.ps1
|
||||
## Desc: Install NSIS
|
||||
################################################################################
|
||||
|
||||
choco install nsis -y
|
||||
|
||||
$NsisPath = "${env:ProgramFiles(x86)}\NSIS\"
|
||||
Add-MachinePathItem $NsisPath
|
||||
$env:Path = Get-MachinePath
|
||||
34
images/win/scripts/Installers/Install-NodeLts.ps1
Normal file
34
images/win/scripts/Installers/Install-NodeLts.ps1
Normal file
@@ -0,0 +1,34 @@
|
||||
################################################################################
|
||||
## File: Install-NodeLts.ps1
|
||||
## Desc: Install nodejs-lts and other common node tools.
|
||||
## Must run after python is configured
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$PrefixPath = 'C:\npm\prefix'
|
||||
$CachePath = 'C:\npm\cache'
|
||||
|
||||
New-Item -Path $PrefixPath -Force -ItemType Directory
|
||||
New-Item -Path $CachePath -Force -ItemType Directory
|
||||
|
||||
choco install nodejs-lts -y --force
|
||||
|
||||
Add-MachinePathItem $PrefixPath
|
||||
$env:Path = Get-MachinePath
|
||||
|
||||
setx NPM_CONFIG_PREFIX $PrefixPath /M
|
||||
$env:NPM_CONFIG_PREFIX = $PrefixPath
|
||||
|
||||
setx NPM_CONFIG_CACHE $CachePath /M
|
||||
$env:NPM_CONFIG_CACHE = $CachePath
|
||||
|
||||
npm config set registry http://registry.npmjs.org/
|
||||
|
||||
npm install -g bower
|
||||
npm install -g cordova
|
||||
npm install -g grunt-cli
|
||||
npm install -g gulp-cli
|
||||
npm install -g parcel-bundler
|
||||
npm install -g --save-dev webpack webpack-cli
|
||||
npm install -g yarn
|
||||
6
images/win/scripts/Installers/Install-OpenSSL.ps1
Normal file
6
images/win/scripts/Installers/Install-OpenSSL.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-OpenSSL.ps1
|
||||
## Desc: Install OpenSSL
|
||||
################################################################################
|
||||
|
||||
choco install openssl.light -y
|
||||
20
images/win/scripts/Installers/Install-PHP.ps1
Normal file
20
images/win/scripts/Installers/Install-PHP.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
################################################################################
|
||||
## File: Install-PHP.ps1
|
||||
## Desc: Install PHP
|
||||
################################################################################
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Import-Module -Name ImageHelpers
|
||||
|
||||
# Install latest PHP in chocolatey
|
||||
$installDir = "c:\tools\php"
|
||||
choco install php -y --force --params "/InstallDir:$installDir"
|
||||
|
||||
# update path to extensions and enable curl and mbstring extensions
|
||||
((Get-Content -path $installDir\php.ini -Raw) -replace ';extension=curl','extension=curl' -replace ';extension=mbstring','extension=mbstring' -replace ';extension_dir = "ext"','extension_dir = "ext"') | Set-Content -Path $installDir\php.ini
|
||||
|
||||
# Set the PHPROOT environment variable.
|
||||
setx PHPROOT $installDir /M
|
||||
|
||||
# Done
|
||||
exit 0
|
||||
6
images/win/scripts/Installers/Install-Perl.ps1
Normal file
6
images/win/scripts/Installers/Install-Perl.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-Perl.ps1
|
||||
## Desc: Install Perl
|
||||
################################################################################
|
||||
|
||||
choco install strawberryperl -y
|
||||
6
images/win/scripts/Installers/Install-PowershellCore.ps1
Normal file
6
images/win/scripts/Installers/Install-PowershellCore.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-PowershellCore.ps1
|
||||
## Desc: Install PowerShell Core
|
||||
################################################################################
|
||||
|
||||
Invoke-Expression "& { $(Invoke-RestMethod https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet"
|
||||
20
images/win/scripts/Installers/Install-Ruby.ps1
Normal file
20
images/win/scripts/Installers/Install-Ruby.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
################################################################################
|
||||
## File: Install-Ruby.ps1
|
||||
## Desc: Install Ruby for Windows
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers
|
||||
|
||||
# Ruby versions are already available in the tool cache.
|
||||
|
||||
# Tool cache Ruby Path
|
||||
$toolcacheRubyPath = 'C:\hostedtoolcache\windows\Ruby\2.5.*'
|
||||
|
||||
# Get Latest Ruby 2.5.x
|
||||
$latestRubyBinPath2_5 = Get-ChildItem -Path $toolcacheRubyPath | Sort-Object {[System.Version]$_.Name} | Select-Object -Last 1 | ForEach-Object {
|
||||
Join-Path $_.FullName 'x64\bin'
|
||||
}
|
||||
|
||||
Add-MachinePathItem $latestRubyBinPath2_5
|
||||
$env:Path = Get-MachinePath
|
||||
exit 0
|
||||
53
images/win/scripts/Installers/Install-Rust.ps1
Normal file
53
images/win/scripts/Installers/Install-Rust.ps1
Normal file
@@ -0,0 +1,53 @@
|
||||
################################################################################
|
||||
## File: Install-Rust.ps1
|
||||
## Desc: Install Rust for Windows
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers
|
||||
|
||||
# Rust Env
|
||||
$env:RUSTUP_HOME="C:\Rust\.rustup"
|
||||
$env:CARGO_HOME="C:\Rust\.cargo"
|
||||
|
||||
# Download the latest rustup-init.exe for Windows x64
|
||||
# See https://rustup.rs/#
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://win.rustup.rs/x86_64" -OutFile rustup-init.exe
|
||||
|
||||
# Install Rust by running rustup-init.exe (disabling the confirmation prompt with -y)
|
||||
.\rustup-init.exe -y
|
||||
|
||||
# Delete rustup-init.exe when it's no longer needed
|
||||
Remove-Item -Path .\rustup-init.exe
|
||||
|
||||
# Add Rust binaries to the path
|
||||
Add-MachinePathItem "$env:CARGO_HOME\bin"
|
||||
$env:Path = Get-MachinePath
|
||||
|
||||
# Install common tools
|
||||
rustup component add rustfmt
|
||||
rustup component add clippy
|
||||
cargo install bindgen
|
||||
cargo install cbindgen
|
||||
|
||||
# Run script at startup for all users
|
||||
$cmdRustSymScript = @"
|
||||
@echo off
|
||||
|
||||
if exist $env:CARGO_HOME (
|
||||
if not exist %USERPROFILE%\.cargo (
|
||||
mklink /J %USERPROFILE%\.cargo $env:CARGO_HOME
|
||||
)
|
||||
)
|
||||
|
||||
if exist $env:RUSTUP_HOME (
|
||||
if not exist %USERPROFILE%\.rustup (
|
||||
mklink /J %USERPROFILE%\.rustup $env:RUSTUP_HOME
|
||||
)
|
||||
)
|
||||
"@
|
||||
|
||||
$cmdPath = "C:\Rust\rustsym.bat"
|
||||
$cmdRustSymScript | Out-File -Encoding ascii -FilePath $cmdPath
|
||||
|
||||
# Update Run key to run a script at logon
|
||||
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "RUSTSYM" -Value $cmdPath
|
||||
61
images/win/scripts/Installers/Install-SQLPowerShellTools.ps1
Normal file
61
images/win/scripts/Installers/Install-SQLPowerShellTools.ps1
Normal file
@@ -0,0 +1,61 @@
|
||||
################################################################################
|
||||
## File: Install-SQLPowerShellTools.ps1
|
||||
## Desc: Install SQL PowerShell tool
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
Function InstallMSI
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$MsiUrl,
|
||||
[String]$MsiName
|
||||
)
|
||||
|
||||
$exitCode = -1
|
||||
|
||||
try
|
||||
{
|
||||
Write-Host "Downloading $MsiName..."
|
||||
$FilePath = "${env:Temp}\$MsiName"
|
||||
|
||||
Invoke-WebRequest -Uri $MsiUrl -OutFile $FilePath
|
||||
|
||||
$Arguments = ('/i', $FilePath, '/QN', '/norestart' )
|
||||
|
||||
Write-Host "Starting Install $MsiName..."
|
||||
$process = Start-Process -FilePath msiexec.exe -ArgumentList $Arguments -Wait -PassThru
|
||||
$exitCode = $process.ExitCode
|
||||
|
||||
if ($exitCode -eq 0 -or $exitCode -eq 3010)
|
||||
{
|
||||
Write-Host -Object 'Installation successful'
|
||||
return $exitCode
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host -Object "Non zero exit code returned by the installation process : $exitCode."
|
||||
exit $exitCode
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Host -Object "Failed to install the MSI $MsiName"
|
||||
Write-Host -Object $_.Exception.Message
|
||||
exit -1
|
||||
}
|
||||
}
|
||||
|
||||
# install required MSIs
|
||||
$SQLSysClrTypesExitCode = InstallMSI -MsiUrl "https://download.microsoft.com/download/8/7/2/872BCECA-C849-4B40-8EBE-21D48CDF1456/ENU/x64/SQLSysClrTypes.msi" -MsiName "SQLSysClrTypes.msi"
|
||||
|
||||
$SharedManagementObjectsExitCode = InstallMSI -MsiUrl "https://download.microsoft.com/download/8/7/2/872BCECA-C849-4B40-8EBE-21D48CDF1456/ENU/x64/SharedManagementObjects.msi" -MsiName "SharedManagementObjects.msi"
|
||||
|
||||
$PowerShellToolsExitCode = InstallMSI -MsiUrl "https://download.microsoft.com/download/8/7/2/872BCECA-C849-4B40-8EBE-21D48CDF1456/ENU/x64/PowerShellTools.msi" -MsiName "PowerShellTools.msi"
|
||||
|
||||
# install sqlserver PS module
|
||||
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
|
||||
Install-Module -Name SqlServer -AllowClobber
|
||||
|
||||
exit $PowerShellToolsExitCode
|
||||
21
images/win/scripts/Installers/Install-Sbt.ps1
Normal file
21
images/win/scripts/Installers/Install-Sbt.ps1
Normal file
@@ -0,0 +1,21 @@
|
||||
################################################################################
|
||||
## File: Install-Sbt.ps1
|
||||
## Team: CI-X
|
||||
## Desc: Install sbt for Windows
|
||||
################################################################################
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Import-Module -Name ImageHelpers
|
||||
|
||||
# Install the latest version of sbt.
|
||||
# See https://chocolatey.org/packages/sbt
|
||||
choco install sbt -y
|
||||
|
||||
$env:SBT_HOME="${env:ProgramFiles(x86)}\sbt"
|
||||
|
||||
# Add sbt binaries to the path
|
||||
Add-MachinePathItem "$env:SBT_HOME\bin"
|
||||
$env:Path = Get-MachinePath
|
||||
|
||||
# Done
|
||||
exit 0
|
||||
17
images/win/scripts/Installers/Install-SeleniumWebDrivers.ps1
Normal file
17
images/win/scripts/Installers/Install-SeleniumWebDrivers.ps1
Normal file
@@ -0,0 +1,17 @@
|
||||
################################################################################
|
||||
## File: Install-SeleniumWebDrivers.ps1
|
||||
## Desc: Install Selenium Web Drivers
|
||||
################################################################################
|
||||
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://seleniumwebdrivers.blob.core.windows.net/seleniumwebdrivers/SeleniumWebDrivers.zip" -OutFile SeleniumWebDrivers.zip
|
||||
|
||||
Expand-Archive -Path SeleniumWebDrivers.zip -DestinationPath "C:\" -Force
|
||||
|
||||
Remove-Item SeleniumWebDrivers.zip
|
||||
|
||||
setx IEWebDriver "C:\SeleniumWebDrivers\IEDriver" /M
|
||||
setx GeckoWebDriver "C:\SeleniumWebDrivers\GeckoDriver" /M
|
||||
setx ChromeWebDriver "C:\SeleniumWebDrivers\ChromeDriver" /M
|
||||
|
||||
exit 0
|
||||
|
||||
13
images/win/scripts/Installers/Install-ServiceFabricSDK.ps1
Normal file
13
images/win/scripts/Installers/Install-ServiceFabricSDK.ps1
Normal file
@@ -0,0 +1,13 @@
|
||||
################################################################################
|
||||
## File: Install-ServiceFabricSDK.ps1
|
||||
## Desc: Install webpicmd and then the service fabric sdk
|
||||
## must be install after Visual Studio
|
||||
################################################################################
|
||||
|
||||
#Creating 'Installer' cache folder if it doesn't exist
|
||||
$temp_install_dir = 'C:\Windows\Installer'
|
||||
New-Item -Path $temp_install_dir -ItemType Directory -Force
|
||||
|
||||
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
|
||||
|
||||
WebpiCmd.exe /Install /Products:MicrosoftAzure-ServiceFabric-CoreSDK /AcceptEula
|
||||
6
images/win/scripts/Installers/Install-Svn.ps1
Normal file
6
images/win/scripts/Installers/Install-Svn.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
## File: Install-Svn.ps1
|
||||
## Desc: Install Subversion
|
||||
################################################################################
|
||||
|
||||
choco install svn -y
|
||||
7
images/win/scripts/Installers/Install-TypeScript.ps1
Normal file
7
images/win/scripts/Installers/Install-TypeScript.ps1
Normal file
@@ -0,0 +1,7 @@
|
||||
################################################################################
|
||||
## File: Install-TypeScript.ps1
|
||||
## Team: CI Build
|
||||
## Desc: Install Latest TypeScript
|
||||
################################################################################
|
||||
|
||||
npm install -g typescript
|
||||
21
images/win/scripts/Installers/Install-Vcpkg.ps1
Normal file
21
images/win/scripts/Installers/Install-Vcpkg.ps1
Normal file
@@ -0,0 +1,21 @@
|
||||
################################################################################
|
||||
## File: Install-Vcpkg.ps1
|
||||
## Desc: Install vcpkg
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$Uri = 'https://github.com/Microsoft/vcpkg.git'
|
||||
$InstallDir = 'C:\vcpkg'
|
||||
$VcpkgExecPath = 'vcpkg.exe'
|
||||
|
||||
git clone --depth=1 $Uri $InstallDir -q
|
||||
|
||||
# Build and integrate vcpkg
|
||||
Invoke-Expression "$InstallDir\bootstrap-vcpkg.bat"
|
||||
Invoke-Expression "$InstallDir\$VcpkgExecPath integrate install"
|
||||
|
||||
# Add vcpkg to system environment
|
||||
Add-MachinePathItem $InstallDir
|
||||
$env:Path = Get-MachinePath
|
||||
setx VCPKG_INSTALLATION_ROOT $InstallDir /M
|
||||
8
images/win/scripts/Installers/Install-WinAppDriver.ps1
Normal file
8
images/win/scripts/Installers/Install-WinAppDriver.ps1
Normal file
@@ -0,0 +1,8 @@
|
||||
####################################################################################
|
||||
## File: Install-WinAppDriver.ps1
|
||||
## Desc: Install Windows Application Driver (WinAppDriver)
|
||||
####################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
Install-MSI -MsiUrl "https://github.com/Microsoft/WinAppDriver/releases/download/v1.1/WindowsApplicationDriver.msi" -MsiName "WindowsApplicationDriver.msi"
|
||||
10
images/win/scripts/Installers/Install-WindowsUpdates.ps1
Normal file
10
images/win/scripts/Installers/Install-WindowsUpdates.ps1
Normal file
@@ -0,0 +1,10 @@
|
||||
################################################################################
|
||||
## File: Install-WindowsUpdates.ps1
|
||||
## Desc: Install Windows Updates.
|
||||
## Should be run at end just before Antivirus.
|
||||
################################################################################
|
||||
|
||||
Write-Host "Run windows updates"
|
||||
Install-Module -Name PSWindowsUpdate -Force -AllowClobber
|
||||
Get-WUInstall -WindowsUpdate -AcceptAll -UpdateType Software -IgnoreReboot
|
||||
Get-WUInstall -MicrosoftUpdate -AcceptAll -IgnoreUserInput -IgnoreReboot
|
||||
156
images/win/scripts/Installers/Update-AndroidSDK.ps1
Normal file
156
images/win/scripts/Installers/Update-AndroidSDK.ps1
Normal file
@@ -0,0 +1,156 @@
|
||||
################################################################################
|
||||
## File: Update-AndroidSDK.ps1
|
||||
## Desc: Install and update Android SDK and tools
|
||||
################################################################################
|
||||
|
||||
# Download the latest command line tools so that we can accept all of the licenses.
|
||||
# See https://developer.android.com/studio/#command-tools
|
||||
Invoke-WebRequest -UseBasicParsing -Uri "https://dl.google.com/android/repository/sdk-tools-windows-4333796.zip" -OutFile android-sdk-tools.zip
|
||||
|
||||
# Don't replace the one that VS installs as it seems to break things.
|
||||
Expand-Archive -Path android-sdk-tools.zip -DestinationPath android-sdk -Force
|
||||
|
||||
$sdk = Get-Item -Path .\android-sdk
|
||||
|
||||
# Install the standard Android SDK licenses. In the past, there wasn't a better way to do this,
|
||||
# so we are base64-encoding a zip of the licenses directory from another installation.
|
||||
# To create this base64 string, create a zip file that contains nothing but a 'licenses' folder,
|
||||
# which folder contains the accepted license files found in 'C:\Program Files (x86)\Android\android-sdk\licenses'.
|
||||
# Then, run this in PowerShell:
|
||||
# $LicensesZipFileName = 'C:\Program Files (x86)\Android\android-sdk\Licenses.zip'
|
||||
# $base64Content = [Convert]::ToBase64String([IO.File]::ReadAllBytes($LicensesZipFileName))
|
||||
# echo $base64Content
|
||||
#
|
||||
# Future: see if the base64 technique can be avoided by running this PowerShell script to accept all licenses.
|
||||
# This fails when run on a live agent, likely because non-interactive mode is set.
|
||||
# It may work fine during image generation (this script).
|
||||
# for($i=0; $i -lt 100; $i++) { $response += "y`n"}; $response | .\sdkmanager.bat --licenses
|
||||
$base64Content = "UEsDBBQAAAAAAKJeN06amkPzKgAAACoAAAAhAAAAbGljZW5zZXMvYW5kcm9pZC1nb29nbGV0di1saWNlbnNlDQpmYzk0NmU4ZjIzMWYzZTMxNTliZjBiN2M2NTVjOTI0Y2IyZTM4MzMwUEsDBBQAAAAIAKBrN05E+YSqQwAAAFQAAAAcAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstbGljZW5zZQXByREAIQgEwP9WmYsjhxgOKJN/CNs9vmdOQ2zdRw2dxQnWjqQ/3oIgXQM9vqUiwkiX8ljWea4ZlCF3xTo1pz6w+wdQSwMEFAAAAAAAxV43TpECY7AqAAAAKgAAACQAAABsaWNlbnNlcy9hbmRyb2lkLXNkay1wcmV2aWV3LWxpY2Vuc2UNCjUwNDY2N2Y0YzBkZTdhZjFhMDZkZTlmNGIxNzI3Yjg0MzUxZjI5MTBQSwMEFAAAAAAAzF43TpOr0CgqAAAAKgAAABsAAABsaWNlbnNlcy9nb29nbGUtZ2RrLWxpY2Vuc2UNCjMzYjZhMmI2NDYwN2YxMWI3NTlmMzIwZWY5ZGZmNGFlNWM0N2Q5N2FQSwMEFAAAAAAAz143TqxN4xEqAAAAKgAAACQAAABsaWNlbnNlcy9pbnRlbC1hbmRyb2lkLWV4dHJhLWxpY2Vuc2UNCmQ5NzVmNzUxNjk4YTc3YjY2MmYxMjU0ZGRiZWVkMzkwMWU5NzZmNWFQSwMEFAAAAAAA0l43Tu2ee/8qAAAAKgAAACYAAABsaWNlbnNlcy9taXBzLWFuZHJvaWQtc3lzaW1hZ2UtbGljZW5zZQ0KNjNkNzAzZjU2OTJmZDg5MWQ1YWNhY2ZiZDhlMDlmNDBmYzk3NjEwNVBLAQIUABQAAAAAAKJeN06amkPzKgAAACoAAAAhAAAAAAAAAAEAIAAAAAAAAABsaWNlbnNlcy9hbmRyb2lkLWdvb2dsZXR2LWxpY2Vuc2VQSwECFAAUAAAACACgazdORPmEqkMAAABUAAAAHAAAAAAAAAABACAAAABpAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstbGljZW5zZVBLAQIUABQAAAAAAMVeN06RAmOwKgAAACoAAAAkAAAAAAAAAAEAIAAAAOYAAABsaWNlbnNlcy9hbmRyb2lkLXNkay1wcmV2aWV3LWxpY2Vuc2VQSwECFAAUAAAAAADMXjdOk6vQKCoAAAAqAAAAGwAAAAAAAAABACAAAABSAQAAbGljZW5zZXMvZ29vZ2xlLWdkay1saWNlbnNlUEsBAhQAFAAAAAAAz143TqxN4xEqAAAAKgAAACQAAAAAAAAAAQAgAAAAtQEAAGxpY2Vuc2VzL2ludGVsLWFuZHJvaWQtZXh0cmEtbGljZW5zZVBLAQIUABQAAAAAANJeN07tnnv/KgAAACoAAAAmAAAAAAAAAAEAIAAAACECAABsaWNlbnNlcy9taXBzLWFuZHJvaWQtc3lzaW1hZ2UtbGljZW5zZVBLBQYAAAAABgAGANoBAACPAgAAAAA="
|
||||
$content = [System.Convert]::FromBase64String($base64Content)
|
||||
Set-Content -Path .\android-sdk-licenses.zip -Value $content -Encoding Byte
|
||||
Expand-Archive -Path .\android-sdk-licenses.zip -DestinationPath 'C:\Program Files (x86)\Android\android-sdk' -Force
|
||||
|
||||
|
||||
# run the updates.
|
||||
# keep newer versions in descending order
|
||||
|
||||
$sdk_root = "C:\Program Files (x86)\Android\android-sdk"
|
||||
|
||||
# The NDK is installed by Visual Studio at this location:
|
||||
$ndk_root = "C:\Microsoft\AndroidNDK64\"
|
||||
|
||||
if(Test-Path $ndk_root){
|
||||
|
||||
$androidNDKs = Get-ChildItem -Path $ndk_root | Sort-Object -Property Name -Descending | Select-Object -First 1
|
||||
$latestAndroidNDK = $androidNDKs.FullName;
|
||||
|
||||
setx ANDROID_HOME $sdk_root /M
|
||||
setx ANDROID_NDK_HOME $latestAndroidNDK /M
|
||||
setx ANDROID_NDK_PATH $latestAndroidNDK /M
|
||||
}
|
||||
else {
|
||||
Write-Host "NDK is not installed at path $ndk_root"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
Push-Location -Path $sdk.FullName
|
||||
|
||||
& '.\tools\bin\sdkmanager.bat' --sdk_root=$sdk_root `
|
||||
"platform-tools" `
|
||||
"platforms;android-29" `
|
||||
"platforms;android-28" `
|
||||
"platforms;android-27" `
|
||||
"platforms;android-26" `
|
||||
"platforms;android-25" `
|
||||
"platforms;android-24" `
|
||||
"platforms;android-23" `
|
||||
"platforms;android-22" `
|
||||
"platforms;android-21" `
|
||||
"platforms;android-19" `
|
||||
"build-tools;29.0.2" `
|
||||
"build-tools;29.0.0" `
|
||||
"build-tools;28.0.3" `
|
||||
"build-tools;28.0.2" `
|
||||
"build-tools;28.0.1" `
|
||||
"build-tools;28.0.0" `
|
||||
"build-tools;27.0.3" `
|
||||
"build-tools;27.0.2" `
|
||||
"build-tools;27.0.1" `
|
||||
"build-tools;27.0.0" `
|
||||
"build-tools;26.0.3" `
|
||||
"build-tools;26.0.2" `
|
||||
"build-tools;26.0.1" `
|
||||
"build-tools;26.0.0" `
|
||||
"build-tools;25.0.3" `
|
||||
"build-tools;25.0.2" `
|
||||
"build-tools;25.0.1" `
|
||||
"build-tools;25.0.0" `
|
||||
"build-tools;24.0.3" `
|
||||
"build-tools;24.0.2" `
|
||||
"build-tools;24.0.1" `
|
||||
"build-tools;24.0.0" `
|
||||
"build-tools;23.0.3" `
|
||||
"build-tools;23.0.2" `
|
||||
"build-tools;23.0.1" `
|
||||
"build-tools;22.0.1" `
|
||||
"build-tools;21.1.2" `
|
||||
"build-tools;20.0.0" `
|
||||
"build-tools;19.1.0" `
|
||||
"extras;android;m2repository" `
|
||||
"extras;google;m2repository" `
|
||||
"extras;google;google_play_services" `
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" `
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1" `
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" `
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1" `
|
||||
"add-ons;addon-google_apis-google-24" `
|
||||
"add-ons;addon-google_apis-google-23" `
|
||||
"add-ons;addon-google_apis-google-22" `
|
||||
"add-ons;addon-google_apis-google-21" `
|
||||
"cmake;3.6.4111459" `
|
||||
"patcher;v4"
|
||||
|
||||
Pop-Location
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$Header = @"
|
||||
|
||||
## Android SDK Build Tools
|
||||
|
||||
"@
|
||||
|
||||
Add-ContentToMarkdown -Content $Header
|
||||
|
||||
$BuildTools =(Get-ChildItem "C:\Program Files (x86)\Android\android-sdk\build-tools\") `
|
||||
| Where { $_.Name -match "[0-9].*" } `
|
||||
| Sort-Object -Descending `
|
||||
| % { "#### $($_.Name)`n`n_Location:_ $($_.FullName)`n" }
|
||||
|
||||
Add-ContentToMarkdown -Content $BuildTools
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$Header = @"
|
||||
|
||||
## Android SDK Platforms
|
||||
|
||||
"@
|
||||
|
||||
Add-ContentToMarkdown -Content $Header
|
||||
|
||||
$SdkList =(Get-ChildItem "C:\Program Files (x86)\Android\android-sdk\platforms\") | Sort-Object -Descending | %{ $_.FullName }
|
||||
|
||||
foreach($sdk in $SdkList)
|
||||
{
|
||||
$sdkProps = ConvertFrom-StringData (Get-Content "$sdk\source.properties" -Raw)
|
||||
|
||||
$content = @"
|
||||
#### $($sdkProps.'Platform.Version') (API $($sdkProps.'AndroidVersion.ApiLevel'))
|
||||
|
||||
_Location:_ $sdk
|
||||
|
||||
"@
|
||||
Add-ContentToMarkdown -Content $content
|
||||
}
|
||||
18
images/win/scripts/Installers/Update-DotnetTLS.ps1
Normal file
18
images/win/scripts/Installers/Update-DotnetTLS.ps1
Normal file
@@ -0,0 +1,18 @@
|
||||
################################################################################
|
||||
## File: Update-DotnetTLS.ps1
|
||||
## Desc: Update DotNetFramework security protocol to TLS 1.2
|
||||
################################################################################
|
||||
|
||||
$registryPath = "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319"
|
||||
$name = "SchUseStrongCrypto"
|
||||
$value = "1"
|
||||
if(Test-Path $registryPath){
|
||||
Set-ItemProperty -Path $registryPath -Name $name -Value $value -Type DWORD
|
||||
}
|
||||
|
||||
$registryPath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319"
|
||||
if(Test-Path $registryPath){
|
||||
Set-ItemProperty -Path $registryPath -Name $name -Value $value -Type DWORD
|
||||
}
|
||||
|
||||
|
||||
25
images/win/scripts/Installers/Validate-7zip.ps1
Normal file
25
images/win/scripts/Installers/Validate-7zip.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
################################################################################
|
||||
## File: Validate-7zip.ps1
|
||||
## Desc: Validate 7zip
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name '7z')
|
||||
{
|
||||
Write-Host "7zip on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host '7zip is not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "7zip"
|
||||
$(7z --help).Split([System.Environment]::NewLine)[1] -match "\d+\.\d+"
|
||||
$7zipVersion = $matches[0]
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $7zipVersion<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
28
images/win/scripts/Installers/Validate-AzureCli.ps1
Normal file
28
images/win/scripts/Installers/Validate-AzureCli.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Validate-AzureCli.ps1
|
||||
## Desc: Validate Azure CLI
|
||||
################################################################################
|
||||
|
||||
if(Get-Command -Name 'az')
|
||||
{
|
||||
Write-Host "Azure Cli $(az --version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Error "Azure Cli not on path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$azureCliVersion = az -v | findstr azure-cli
|
||||
$azureCliVersion = $azureCliVersion.trim().Substring("azure-cli".Length).trim()
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Azure CLI"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $azureCliVersion
|
||||
_Environment:_
|
||||
* PATH: contains location of az.cmd
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
@@ -0,0 +1,47 @@
|
||||
################################################################################
|
||||
## File: Validate-AzureCosmosDbEmulator.ps1
|
||||
## Desc: Validate Azure CosmosDb Emulator installation.
|
||||
################################################################################
|
||||
|
||||
$SoftwareName = 'Azure CosmosDb Emulator'
|
||||
$regKey = gci HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | gp | ? { $_.DisplayName -eq 'Azure Cosmos DB Emulator' }
|
||||
|
||||
if ($regKey -eq $null)
|
||||
{
|
||||
Write-Host "The $regKey registry key is not set"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "The $regKey registry key is set"
|
||||
}
|
||||
|
||||
$installDir = $regKey.InstallLocation
|
||||
if ($installDir -eq $null)
|
||||
{
|
||||
Write-Host "The $SoftwareName installation directory registry value is not set"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "The $SoftwareName installation directory registry value is set to: $installDir"
|
||||
}
|
||||
|
||||
$exeFilePath = Join-Path $installDir 'CosmosDB.Emulator.exe'
|
||||
if (!(Test-Path $exeFilePath))
|
||||
{
|
||||
Write-Host "$SoftwareName is not installed"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
{
|
||||
$fileVersion = (Get-Item $exeFilePath).VersionInfo.FileVersion
|
||||
Write-Host "$SoftwareName is successfully installed: $fileVersion"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $fileVersion<br/>
|
||||
_Location:_ $installDir
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
}
|
||||
24
images/win/scripts/Installers/Validate-AzureDevOpsCli.ps1
Normal file
24
images/win/scripts/Installers/Validate-AzureDevOpsCli.ps1
Normal file
@@ -0,0 +1,24 @@
|
||||
################################################################################
|
||||
## File: Validate-AzureDevOpsCli.ps1
|
||||
## Desc: Validate Azure DevOps CLI
|
||||
################################################################################
|
||||
|
||||
az devops -h
|
||||
|
||||
if($LastExitCode -ne 0)
|
||||
{
|
||||
Write-Error "Azure DevOps Cli extension not present"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Azure DevOps Cli extension is present"
|
||||
}
|
||||
|
||||
$azDevopsVer = az -v | findstr azure-devops
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $azDevopsVer
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName 'Azure DevOps Cli extension' -DescriptionMarkdown $Description
|
||||
71
images/win/scripts/Installers/Validate-AzureModules.ps1
Normal file
71
images/win/scripts/Installers/Validate-AzureModules.ps1
Normal file
@@ -0,0 +1,71 @@
|
||||
################################################################################
|
||||
## File: Validate-AzureModules.ps1
|
||||
## Desc: Validate Azure PowerShell modules
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$DefaultModule = Get-Module -Name AzureRM -ListAvailable | Select-Object -First 1
|
||||
|
||||
$env:PSModulePath = $env:PSModulePath + ";C:\Modules"
|
||||
|
||||
$azureModules = Get-Module -Name Azure -ListAvailable | Select-Object Name,Version,Path | Format-Table | Out-String
|
||||
|
||||
Write-Host "The Azure Modules finally present are:"
|
||||
$azureModules
|
||||
|
||||
if( ($azureModules -match "2.1.0") -and ($azureModules -match "3.8.0") -and ($azureModules -match "4.2.1") -and ($azureModules -match "5.1.1"))
|
||||
{
|
||||
Write-Host "Required Azure modules are present"
|
||||
}
|
||||
else {
|
||||
Write-Host "One or more required Azure modules are not present"
|
||||
throw "One or more required Azure modules are not present."
|
||||
}
|
||||
|
||||
|
||||
$azureRMModules = Get-Module -Name AzureRM -ListAvailable | Select-Object Name,Version,Path | Format-Table | Out-String
|
||||
|
||||
Write-Host "The AzureRM Modules finally present are:"
|
||||
$azureRMModules
|
||||
|
||||
if( ($azureRMModules -match "2.1.0") -and ($azureRMModules -match "3.8.0") -and ($azureRMModules -match "4.2.1") -and ($azureRMModules -match "5.1.1"))
|
||||
{
|
||||
Write-Host "Required AzureRM modules are present"
|
||||
|
||||
}
|
||||
else {
|
||||
Write-Host "One or more required AzureRM modules are not present"
|
||||
throw "One or more required AzureRM modules are not present."
|
||||
}
|
||||
|
||||
|
||||
$azureModules = Get-Module -Name AzureRM -ListAvailable
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Azure/AzureRM Powershell modules"
|
||||
|
||||
$Description = @"
|
||||
#### $($DefaultModule.Version)
|
||||
|
||||
This version is installed and is available via `Get-Module -ListAvailable`
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
foreach( $module in $azureModules)
|
||||
{
|
||||
if($module.Version -ne $DefaultModule.Version)
|
||||
{
|
||||
|
||||
$CurrentModule = @"
|
||||
#### $($module.Version)
|
||||
|
||||
This version is saved but not installed
|
||||
_Location:_ $($module.Path)
|
||||
|
||||
"@
|
||||
Add-ContentToMarkdown -Content $CurrentModule
|
||||
}
|
||||
}
|
||||
75
images/win/scripts/Installers/Validate-Boost.ps1
Normal file
75
images/win/scripts/Installers/Validate-Boost.ps1
Normal file
@@ -0,0 +1,75 @@
|
||||
################################################################################
|
||||
## File: Validate-Boost.ps1
|
||||
## Desc: Validate Boost
|
||||
################################################################################
|
||||
|
||||
function Validate-BoostVersion
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$BoostRootPath,
|
||||
[String]$BoostRelease
|
||||
)
|
||||
|
||||
$ReleasePath = Join-Path -Path $BoostRootPath -ChildPath $BoostRelease
|
||||
|
||||
if ((Test-Path "$ReleasePath\b2.exe") -and (Test-Path "$ReleasePath\bjam.exe"))
|
||||
{
|
||||
Write-Host "Boost.Build $BoostRelease is successfully installed"
|
||||
Write-Host "Boost.Jam $BoostRelease is successfully installed"
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "$BoostRelease not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Verify that Boost is on the path
|
||||
if ((Get-Command -Name 'b2') -and (Get-Command -Name 'bjam'))
|
||||
{
|
||||
Write-Host "Boost is on the path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Boost is not on the path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$tmplMark = @"
|
||||
#### {0}
|
||||
|
||||
_Environment:_
|
||||
* {1}: root directory of the Boost version {0} installation
|
||||
|
||||
"@
|
||||
|
||||
$tmplMarkRoot = @"
|
||||
#### {0}
|
||||
|
||||
* PATH: contains the location of Boost version {0}
|
||||
* BOOST_ROOT: root directory of the Boost version {0} installation
|
||||
* {1}: root directory of the Boost version {0} installation
|
||||
"@
|
||||
|
||||
$SoftwareName = 'Boost'
|
||||
$Description = New-Object System.Text.StringBuilder
|
||||
$BoostRootDirectory = Join-Path -Path $env:ProgramFiles -ChildPath "Boost"
|
||||
$BoostVersionsToInstall = $env:BOOST_VERSIONS.split(",")
|
||||
|
||||
foreach($Boost in $BoostVersionsToInstall)
|
||||
{
|
||||
Validate-BoostVersion -BoostRootPath $BoostRootDirectory -BoostRelease $Boost
|
||||
$BoostVersionTag = "BOOST_ROOT_{0}" -f $Boost.Replace('.', '_')
|
||||
|
||||
if($boost -eq $env:BOOST_DEFAULT)
|
||||
{
|
||||
$null = $Description.AppendLine(($tmplMarkRoot -f $BoostVersion, $BoostVersionTag))
|
||||
}
|
||||
else
|
||||
{
|
||||
$null = $Description.AppendLine(($tmplMark -f $BoostVersion, $BoostVersionTag))
|
||||
}
|
||||
}
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description.ToString()
|
||||
25
images/win/scripts/Installers/Validate-Chrome.ps1
Normal file
25
images/win/scripts/Installers/Validate-Chrome.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
################################################################################
|
||||
## File: Validate-Chrome.ps1
|
||||
## Desc: Validate Google Chrome installation.
|
||||
################################################################################
|
||||
|
||||
if(Test-Path "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe")
|
||||
{
|
||||
(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo
|
||||
|
||||
$SoftwareName = "Google Chrome"
|
||||
$fileVersion = (Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.FileVersion
|
||||
$Description = @"
|
||||
_version:_
|
||||
$fileVersion
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
exit 0
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Google Chrome is not installed."
|
||||
exit 1
|
||||
}
|
||||
28
images/win/scripts/Installers/Validate-CloudFoundryCli.ps1
Normal file
28
images/win/scripts/Installers/Validate-CloudFoundryCli.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Validate-CloudFoundryCli.ps1
|
||||
## Desc: Validate Cloud Foundry CLI
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'cf')
|
||||
{
|
||||
Write-Host "cf on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'cf is not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Cloud Foundry CLI"
|
||||
|
||||
if( $(cf version) -match '\d+\.\d+\.\d+' )
|
||||
{
|
||||
$version = $Matches[0]
|
||||
}
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
31
images/win/scripts/Installers/Validate-Cmake.ps1
Normal file
31
images/win/scripts/Installers/Validate-Cmake.ps1
Normal file
@@ -0,0 +1,31 @@
|
||||
################################################################################
|
||||
## File: Validate-Cmake.ps1
|
||||
## Desc: Validate Cmake
|
||||
################################################################################
|
||||
|
||||
if(Get-Command -Name 'cmake')
|
||||
{
|
||||
Write-Host "Cmake $(cmake -version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'cmake not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
if( $( $(cmake -version) | Out-String) -match 'cmake version (?<version>.*).*' )
|
||||
{
|
||||
$cmakeVersion = $Matches.version.Trim()
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Cmake"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $cmakeVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of cmake.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
33
images/win/scripts/Installers/Validate-DACFx.ps1
Normal file
33
images/win/scripts/Installers/Validate-DACFx.ps1
Normal file
@@ -0,0 +1,33 @@
|
||||
####################################################################################
|
||||
## File: Validate-DACFx.ps1
|
||||
## Desc: Validate SQL Server® Data-Tier Application Framework (DACFx) for Windows
|
||||
####################################################################################
|
||||
|
||||
$env:PATH = $env:Path + ';C:\Program Files\Microsoft SQL Server\120\DAC\bin;C:\Program Files\Microsoft SQL Server\130\DAC\bin;C:\Program Files\Microsoft SQL Server\140\DAC\bin;C:\Program Files\Microsoft SQL Server\150\DAC\bin'
|
||||
|
||||
if(Get-Command -Name 'SqlPackage')
|
||||
{
|
||||
|
||||
Write-Host "DACFx is installed at path" (Get-Command -Name 'SqlPackage').Source
|
||||
}
|
||||
else
|
||||
{
|
||||
throw "DACFx is not installed!"
|
||||
}
|
||||
|
||||
function Get-DacFxVersion
|
||||
{
|
||||
$regKey = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Data-Tier Application Framework\CurrentVersion"
|
||||
$Version = (Get-ItemProperty -Path $regKey).'(Default)'
|
||||
return $Version
|
||||
}
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "SQL Server Data Tier Application Framework (x64)"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $(Get-DacFxVersion)<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
46
images/win/scripts/Installers/Validate-Docker.ps1
Normal file
46
images/win/scripts/Installers/Validate-Docker.ps1
Normal file
@@ -0,0 +1,46 @@
|
||||
################################################################################
|
||||
## File: Validate-Docker.ps1
|
||||
## Desc: Validate Docker.
|
||||
################################################################################
|
||||
|
||||
|
||||
if((Get-Command -Name 'docker') -and (Get-Command -Name 'docker-compose'))
|
||||
{
|
||||
Write-Host "docker $(docker version) on path"
|
||||
Write-Host "docker-compose $(docker-compose version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "docker or docker-compose are not on path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Docker"
|
||||
|
||||
$version = $(docker version --format '{{.Server.Version}}')
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of docker.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
|
||||
|
||||
$SoftwareName = "Docker-compose"
|
||||
|
||||
if( $(docker-compose --version) -match 'docker-compose version (?<version>.*), build.*' )
|
||||
{
|
||||
$dockerComposeVersion = $Matches.version
|
||||
}
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $dockerComposeVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of docker-compose.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
46
images/win/scripts/Installers/Validate-DotnetSDK.ps1
Normal file
46
images/win/scripts/Installers/Validate-DotnetSDK.ps1
Normal file
@@ -0,0 +1,46 @@
|
||||
################################################################################
|
||||
## File: Validate-DotnetSDK.ps1
|
||||
## Desc: Validate dotnet
|
||||
################################################################################
|
||||
|
||||
if(Get-Command -Name 'dotnet')
|
||||
{
|
||||
Write-Host "dotnet $(dotnet --version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "dotnet is not on path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = ".NET Core"
|
||||
|
||||
$Description = @"
|
||||
The following runtimes and SDKs are installed:
|
||||
|
||||
_Environment:_
|
||||
* PATH: contains location of dotnet.exe
|
||||
|
||||
_SDK:_
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
$SdkList =(Get-ChildItem "C:\Program Files\dotnet\sdk") | Where { $_.Name -match "[0-9].*" } | Sort-Object -Descending | % { "* $($_.Name) $($_.FullName)" }
|
||||
|
||||
Add-ContentToMarkdown -Content $SdkList
|
||||
|
||||
|
||||
|
||||
$Runtimes = @"
|
||||
|
||||
_Runtime:_
|
||||
"@
|
||||
|
||||
Add-ContentToMarkdown -Content $Runtimes
|
||||
|
||||
$RuntimeList =(Get-ChildItem "C:\Program Files\dotnet\shared\Microsoft.NETCore.App") | Where { $_.Name -match "[0-9].*" } | Sort-Object -Descending | % { "* $($_.Name) $($_.FullName)" }
|
||||
|
||||
Add-ContentToMarkdown -Content $RuntimeList
|
||||
|
||||
28
images/win/scripts/Installers/Validate-DotnetTLS.ps1
Normal file
28
images/win/scripts/Installers/Validate-DotnetTLS.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Validate-DotnetTLS.ps1
|
||||
## Desc: Validate DotNetFramework security protocol to TLS 1.2
|
||||
################################################################################
|
||||
|
||||
$protocols = [Net.ServicePointManager]::SecurityProtocol
|
||||
$protocolArr = $protocols -split ', '
|
||||
if($protocolArr.Contains('Tls12'))
|
||||
{
|
||||
Write-Host "Tls 1.2 has been enabled."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Tls 1.2 has not been enabled."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "TLS12"
|
||||
$version = "1.2";
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
_Description:_ .NET has been configured to use TLS 1.2 by default
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
25
images/win/scripts/Installers/Validate-Firefox.ps1
Normal file
25
images/win/scripts/Installers/Validate-Firefox.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
################################################################################
|
||||
## File: Validate-Firefox.ps1
|
||||
## Desc: Validate Mozilla Firefox installation.
|
||||
################################################################################
|
||||
|
||||
if(Test-Path "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe")
|
||||
{
|
||||
(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe').'(Default)').VersionInfo
|
||||
|
||||
$fileVersion = (Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe').'(Default)').VersionInfo.FileVersion
|
||||
$SoftwareName = "Mozilla Firefox"
|
||||
$Description = @"
|
||||
_version:_
|
||||
$fileVersion
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
exit 0
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Mozilla Firefox is not installed."
|
||||
exit 1
|
||||
}
|
||||
49
images/win/scripts/Installers/Validate-Git.ps1
Normal file
49
images/win/scripts/Installers/Validate-Git.ps1
Normal file
@@ -0,0 +1,49 @@
|
||||
################################################################################
|
||||
## File: Validate-Git.ps1
|
||||
## Desc: Validate Git for Windows
|
||||
################################################################################
|
||||
|
||||
if((Get-Command -Name 'git') -and (Get-Command -Name 'bash') -and (Get-Command -Name 'awk') -and (Get-Command -Name 'git-lfs'))
|
||||
{
|
||||
Write-Host "$(git version) on path"
|
||||
Write-Host "$(git-lfs version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "git or git-lfs are not on path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
if( $(git version) -match 'git version (?<version>.*).win.*' )
|
||||
{
|
||||
$gitVersion = $Matches.version
|
||||
}
|
||||
|
||||
if( $(git-lfs version) -match 'git-lfs\/(?<version>.*) \(Git.*' )
|
||||
{
|
||||
$gitLfsVersion = $Matches.version
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Git"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $gitVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of git.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Git Large File Storage (LFS)"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $gitLfsVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of git-lfs.exe
|
||||
* GIT_LFS_PATH: location of git-lfs.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
25
images/win/scripts/Installers/Validate-GitVersion.ps1
Normal file
25
images/win/scripts/Installers/Validate-GitVersion.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
################################################################################
|
||||
## File: Validate-GitVersion.ps1
|
||||
## Desc: Validate GitVersion
|
||||
################################################################################
|
||||
|
||||
$command = Get-Command -Name 'gitversion'
|
||||
if ($command)
|
||||
{
|
||||
Write-Host "gitversion on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'gitversion is not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "GitVersion"
|
||||
$version = $command.Version.ToString()
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
70
images/win/scripts/Installers/Validate-Go.ps1
Normal file
70
images/win/scripts/Installers/Validate-Go.ps1
Normal file
@@ -0,0 +1,70 @@
|
||||
################################################################################
|
||||
## File: Validate-Go.ps1
|
||||
## Desc: Validate Go
|
||||
################################################################################
|
||||
|
||||
# Function that gets the version of Go at the specified path
|
||||
function Get-GoVersion
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$goRootPath
|
||||
)
|
||||
|
||||
$env:Path = "$goRootPath\bin;" + $env:Path
|
||||
if( $(go version) -match 'go version go(?<version>.*) win.*' )
|
||||
{
|
||||
$goVersion = $Matches.version
|
||||
return $goVersion
|
||||
}
|
||||
|
||||
Write-Host "Unable to determine Go version at " + $goRootPath
|
||||
return ""
|
||||
}
|
||||
|
||||
# Verify that go.exe is on the path
|
||||
if(Get-Command -Name 'go')
|
||||
{
|
||||
Write-Host "$(go version) is on the path."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Go is not on the path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Add details of available versions in Markdown
|
||||
$tmplMark = @"
|
||||
#### {0}
|
||||
|
||||
_Environment:_
|
||||
* {1}: root directory of the Go {0} installation
|
||||
|
||||
"@
|
||||
|
||||
$tmplMarkRoot = @"
|
||||
#### {0}
|
||||
|
||||
_Environment:_
|
||||
* PATH: contains the location of go.exe version {0}
|
||||
* GOROOT: root directory of the Go {0} installation
|
||||
* {1}: root directory of the Go {0} installation
|
||||
"@
|
||||
|
||||
$SoftwareName = "Go (x64)"
|
||||
$Description = New-Object System.Text.StringBuilder
|
||||
$goVersionsToInstall = $env:GO_VERSIONS.split(",")
|
||||
|
||||
foreach($go in $goVersionsToInstall) {
|
||||
$goVersion = Get-GoVersion -goRootPath "C:\Go${go}"
|
||||
$goVersionTag = "GOROOT_{0}_{1}_X64" -f $go.split(".")
|
||||
if ($goVersion -eq $go) {
|
||||
if($go -eq $env:GO_DEFAULT) {
|
||||
$null = $Description.AppendLine(($tmplMarkRoot -f $goVersion, $goVersionTag))
|
||||
} else {
|
||||
$null = $Description.AppendLine(($tmplMark -f $goVersion, $goVersionTag))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description.ToString()
|
||||
27
images/win/scripts/Installers/Validate-InnoSetup.ps1
Normal file
27
images/win/scripts/Installers/Validate-InnoSetup.ps1
Normal file
@@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
## File: Validate-InnoSetup.ps1
|
||||
## Desc: Validate Inno Setup
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'iscc')
|
||||
{
|
||||
Write-Host "iscc is on PATH"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "iscc is not on PATH"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Inno Setup"
|
||||
|
||||
$ChocoList = $(choco list --local-only innosetup) | Select-String -Pattern "InnoSetup"
|
||||
$ChocoList -Match "\d+\.\d+\.\d+"
|
||||
$Version = $Matches[0]
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $Version<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
113
images/win/scripts/Installers/Validate-JavaTools.ps1
Normal file
113
images/win/scripts/Installers/Validate-JavaTools.ps1
Normal file
@@ -0,0 +1,113 @@
|
||||
################################################################################
|
||||
## File: Validate-JavaTools.ps1
|
||||
## Desc: Validate various JDKs and java tools
|
||||
################################################################################
|
||||
|
||||
if((Get-Command -Name 'java') -and (Get-Command -Name 'mvn') -and (Get-Command -Name 'ant') -and (Get-Command -Name 'gradle'))
|
||||
{
|
||||
Write-Host "Java $(java -version) on path"
|
||||
Write-Host "Maven $(mvn -version) on path"
|
||||
Write-Host "Ant $(ant -version) on path"
|
||||
Write-Host "Gradle $(gradle -version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "one of Java,Maven,Ant,Gradle is not on path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?<vendor>.+) version "(?<version>.+)".*' )
|
||||
{
|
||||
$javaVersion = $Matches.version
|
||||
}
|
||||
|
||||
$env:Path = $env:JAVA_HOME_7_X64 + "\bin;" + $env:Path
|
||||
|
||||
if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?<vendor>.+) version "(?<version>.+)".*' )
|
||||
{
|
||||
$java7Version = $Matches.version
|
||||
}
|
||||
|
||||
$env:Path = $env:JAVA_HOME_11_X64 + "\bin;" + $env:Path
|
||||
|
||||
if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?<vendor>.+) version "(?<version>.+)".*' )
|
||||
{
|
||||
$java11Version = $Matches.version
|
||||
}
|
||||
|
||||
|
||||
if( $(ant -version) -match 'Apache Ant\(TM\) version (?<version>.*) compiled.*' )
|
||||
{
|
||||
$antVersion = $Matches.version
|
||||
}
|
||||
|
||||
if( $( $(mvn -version) | Out-String) -match 'Apache Maven (?<version>.*) \(.*' )
|
||||
{
|
||||
$mvnVersion = $Matches.version
|
||||
}
|
||||
|
||||
if( $( $(gradle -version) | Out-String) -match 'Gradle (?<version>.*)' )
|
||||
{
|
||||
$gradleVersion = $Matches.version.Trim()
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Java Development Kit"
|
||||
|
||||
$Description = @"
|
||||
#### $javaVersion
|
||||
|
||||
_Environment:_
|
||||
* JAVA_HOME: location of JDK
|
||||
* PATH: contains bin folder of JDK
|
||||
|
||||
#### $java7Version
|
||||
|
||||
_Location:_ $env:JAVA_HOME_7_X64
|
||||
|
||||
#### $java11Version
|
||||
|
||||
_Location:_ $env:JAVA_HOME_11_X64
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Ant"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $antVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of ant.cmd
|
||||
* ANT_HOME: location of ant.cmd
|
||||
* COBERTURA_HOME: location of cobertura-2.1.1.jar
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Maven"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $mvnVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of mvn.bat
|
||||
* M2_HOME: Maven installation root
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Gradle"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $gradleVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of gradle
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
23
images/win/scripts/Installers/Validate-Jq.ps1
Normal file
23
images/win/scripts/Installers/Validate-Jq.ps1
Normal file
@@ -0,0 +1,23 @@
|
||||
################################################################################
|
||||
## File: Validate-Jq.ps1
|
||||
## Desc: Validate jq
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'jq')
|
||||
{
|
||||
Write-Host "jq on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'jq is not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "jq"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $(jq --version)<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
28
images/win/scripts/Installers/Validate-Kind.ps1
Normal file
28
images/win/scripts/Installers/Validate-Kind.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Validate-Kind.ps1
|
||||
## Desc: Validate Kind.
|
||||
################################################################################
|
||||
|
||||
|
||||
if((Get-Command -Name 'kind'))
|
||||
{
|
||||
Write-Host "kind $(kind version) in path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "kind is not in path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Kind"
|
||||
|
||||
$version = $(kind version)
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of kind.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
28
images/win/scripts/Installers/Validate-KubernetesCli.ps1
Normal file
28
images/win/scripts/Installers/Validate-KubernetesCli.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Validate-KubernetesCli.ps1
|
||||
## Desc: Validate KubernetesCli.
|
||||
################################################################################
|
||||
|
||||
|
||||
if((Get-Command -Name 'kubectl'))
|
||||
{
|
||||
Write-Host "kubectl $(kubectl version --client=true --short=true) in path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "kubectl is not in path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Kubectl"
|
||||
|
||||
$version = $(kubectl version --client=true --short=true)
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of kubectl.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
25
images/win/scripts/Installers/Validate-Mercurial.ps1
Normal file
25
images/win/scripts/Installers/Validate-Mercurial.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
################################################################################
|
||||
## File: Validate-Mercurial.ps1
|
||||
## Desc: Validate Mercurial
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'hg')
|
||||
{
|
||||
Write-Host "Mercurial on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'Mercurial is not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Mercurial"
|
||||
$(hg --version).Split([System.Environment]::NewLine)[0] -match "\d+\.\d+\.\d+"
|
||||
$MercurialVersion = $matches[0]
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $MercurialVersion<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
57
images/win/scripts/Installers/Validate-MinGW.ps1
Normal file
57
images/win/scripts/Installers/Validate-MinGW.ps1
Normal file
@@ -0,0 +1,57 @@
|
||||
################################################################################
|
||||
## File: Validate-MinGW.ps1
|
||||
## Desc: Validate MinGW
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'gcc')
|
||||
{
|
||||
Write-Host "gcc is successfully installed:"
|
||||
gcc --version | Write-Host
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "gcc is not on PATH"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (Get-Command -Name 'g++')
|
||||
{
|
||||
Write-Host "g++ is successfully installed:"
|
||||
g++ --version | Write-Host
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "g++ is not on PATH"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (Get-Command -Name 'make')
|
||||
{
|
||||
Write-Host "make is successfully installed:"
|
||||
make --version | Write-Host
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "make is not on PATH"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
|
||||
# `gcc --version` gives output like:
|
||||
# gcc.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 5.3.0
|
||||
# Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
# This is free software; see the source for copying conditions. There is NO
|
||||
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
$SoftwareName = "MinGW"
|
||||
$(gcc --version).Split([System.Environment]::NewLine)[0] -match "\d\.\d\.\d$"
|
||||
$minGwVersion = $matches[0]
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $minGwVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of the MinGW 'bin' directory
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
36
images/win/scripts/Installers/Validate-Miniconda.ps1
Normal file
36
images/win/scripts/Installers/Validate-Miniconda.ps1
Normal file
@@ -0,0 +1,36 @@
|
||||
################################################################################
|
||||
## File: Validate-Miniconda.ps1
|
||||
## Desc: Validate Miniconda
|
||||
################################################################################
|
||||
|
||||
if ($env:CONDA)
|
||||
{
|
||||
Write-Host "The CONDA environment variable is set"
|
||||
Write-Host $env:CONDA
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "The CONDA environment variable is not set"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ((Test-Path "$env:CONDA\python.exe") -and (Test-Path "$env:CONDA\Scripts\conda.exe"))
|
||||
{
|
||||
Write-Host "Miniconda is successfully installed:"
|
||||
& "$env:CONDA\Scripts\conda.exe" --version | Write-Host
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Miniconda is not installed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$softwareName = "Miniconda"
|
||||
$description = @"
|
||||
_Version:_ $(& "$env:CONDA\Scripts\conda.exe" --version)<br/>
|
||||
_Environment:_
|
||||
* CONDA: contains location of the root of the Miniconda installation
|
||||
"@
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $softwareName -DescriptionMarkdown $description
|
||||
27
images/win/scripts/Installers/Validate-MysqlCli.ps1
Normal file
27
images/win/scripts/Installers/Validate-MysqlCli.ps1
Normal file
@@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
## File: Validate-MysqlCli.ps1
|
||||
## Desc: Validate Mysql Cli
|
||||
################################################################################
|
||||
|
||||
$command = Get-Command -Name 'mysql'
|
||||
if($command)
|
||||
{
|
||||
Write-Host "Mysql is on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'Mysql not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Mysql"
|
||||
$version = $command.Version.ToString();
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of mysql.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
27
images/win/scripts/Installers/Validate-NET472.ps1
Normal file
27
images/win/scripts/Installers/Validate-NET472.ps1
Normal file
@@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
## File: Validate-NET472.ps1
|
||||
## Desc: Validate .NET 4.7.2
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
# For reference, visit https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#ps_a
|
||||
if(Get-ChildItem "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" | Get-ItemPropertyValue -Name Release | ForEach-Object { $_ -ge 461814 })
|
||||
{
|
||||
$version = Get-ChildItem "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" | Get-ItemPropertyValue -Name Version
|
||||
Write-Host "Installed .Net version " $version
|
||||
}
|
||||
else {
|
||||
Write-Host ".Net 472 not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = ".NET 4.7.2"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
27
images/win/scripts/Installers/Validate-NET48.ps1
Normal file
27
images/win/scripts/Installers/Validate-NET48.ps1
Normal file
@@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
## File: Validate-NET48.ps1
|
||||
## Desc: Validate .NET 4.8
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
# For reference, visit https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#ps_a
|
||||
if(Get-ChildItem "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" | Get-ItemPropertyValue -Name Release | ForEach-Object { $_ -ge 528049 })
|
||||
{
|
||||
$version = Get-ChildItem "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" | Get-ItemPropertyValue -Name Version
|
||||
Write-Host "Installed .Net version " $version
|
||||
}
|
||||
else {
|
||||
Write-Host ".Net 48 not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = ".NET 4.8"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
32
images/win/scripts/Installers/Validate-NSIS.ps1
Normal file
32
images/win/scripts/Installers/Validate-NSIS.ps1
Normal file
@@ -0,0 +1,32 @@
|
||||
################################################################################
|
||||
## File: Validate-NSIS.ps1
|
||||
## Desc: Validate NSIS installation.
|
||||
################################################################################
|
||||
|
||||
$SoftwareName = 'Nullsoft Install System (NSIS)'
|
||||
|
||||
if (Get-Command -Name makensis)
|
||||
{
|
||||
Write-Host "$SoftwareName is installed"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "$SoftwareName is not installed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$ChocoList = $(choco list --local-only nsis) | Select-String -Pattern "nsis" | Select-Object -First 1
|
||||
|
||||
if ($ChocoList -Match "\d+\.\d+")
|
||||
{
|
||||
$Version = $Matches[0]
|
||||
}
|
||||
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $Version<br/>
|
||||
"@
|
||||
|
||||
#Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
Write-Host $description
|
||||
71
images/win/scripts/Installers/Validate-NodeLts.ps1
Normal file
71
images/win/scripts/Installers/Validate-NodeLts.ps1
Normal file
@@ -0,0 +1,71 @@
|
||||
################################################################################
|
||||
## File: Validate-NodeLts.ps1
|
||||
## Desc: Validate nodejs-lts and other common node tools.
|
||||
################################################################################
|
||||
|
||||
if((Get-Command -Name 'node') -and (Get-Command -Name 'npm'))
|
||||
{
|
||||
Write-Host "Node $(node --version) on path"
|
||||
Write-Host "Npm $(npm -version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Node or npm is not on path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if((Get-Command -Name 'gulp') -and (Get-Command -Name 'grunt') -and (Get-Command -Name 'bower') -and (Get-Command -Name 'cordova') -and (Get-Command -Name 'yarn'))
|
||||
{
|
||||
Write-Host "Gulp $(gulp -version) on path"
|
||||
Write-Host "Grunt $(grunt -version) on path"
|
||||
Write-Host "Bower $(bower -version) on path"
|
||||
Write-Host "Yarn $(yarn -version) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "One of Gulp, Grunt, Bower, Cordova, or Yarn is not on the path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
|
||||
if( $(node --version) -match 'v(?<version>.*)' )
|
||||
{
|
||||
$nodeVersion = $Matches.version
|
||||
$nodeArch = $(node -e "console.log(process.arch)")
|
||||
}
|
||||
|
||||
$npmVersion = $(npm -version)
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Node.js"
|
||||
$GulpInfo = "Gulp $(gulp -version)"
|
||||
$GruntInfo = "Grunt $(grunt -version)"
|
||||
$BowerInfo = "Bower $(bower -version)"
|
||||
$YarnInfo = "Yarn $(yarn -version)"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $nodeVersion<br/>
|
||||
_Architecture:_ $nodeArch<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of node.exe<br/>
|
||||
* $GulpInfo<br/>
|
||||
* $GruntInfo<br/>
|
||||
* $BowerInfo<br/>
|
||||
* $YarnInfo<br/>
|
||||
|
||||
> Note: You can install and use another version of Node.js on Microsoft-hosted agent pools using the [Node tool installer](https://docs.microsoft.com/vsts/pipelines/tasks/tool/node-js) task.
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "npm"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $npmVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of npm.cmd
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
29
images/win/scripts/Installers/Validate-OpenSSL.ps1
Normal file
29
images/win/scripts/Installers/Validate-OpenSSL.ps1
Normal file
@@ -0,0 +1,29 @@
|
||||
################################################################################
|
||||
## File: Validate-OpenSSL.ps1
|
||||
## Desc: Validate openssl
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'openssl')
|
||||
{
|
||||
Write-Host "openssl on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'openssl is not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "OpenSSL"
|
||||
|
||||
$versions = Get-Command openssl -All
|
||||
foreach ($version in $versions)
|
||||
{
|
||||
$command = "& `"$($version.Source)`" version"
|
||||
if ( $(Invoke-Expression -Command $command) -match '\d+\.\d+\.\d+\w?' )
|
||||
{
|
||||
$Description += "_Version:_ $($Matches[0]) at $($version.Source)<br/>"
|
||||
}
|
||||
}
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
49
images/win/scripts/Installers/Validate-PHP.ps1
Normal file
49
images/win/scripts/Installers/Validate-PHP.ps1
Normal file
@@ -0,0 +1,49 @@
|
||||
################################################################################
|
||||
## File: Validate-PHP.ps1
|
||||
## Desc: Validate PHP
|
||||
################################################################################
|
||||
|
||||
# Function that gets the version of php at the specified path
|
||||
function Get-PHPVersion
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$phpRootPath
|
||||
)
|
||||
|
||||
$env:Path = "$phpRootPath;" + $env:Path
|
||||
if($($(php --version)| Out-String) -match 'PHP (?<version>.*) (.*cli).*')
|
||||
{
|
||||
$phpVersion = $Matches.version
|
||||
return $phpVersion
|
||||
}
|
||||
|
||||
Write-Host "Unable to determine PHP version at " + $phpRootPath
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Verify that php.exe is on the path
|
||||
if(Get-Command -Name 'php')
|
||||
{
|
||||
Write-Host "$(php --version) is on the path."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "php is not on the path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Get available versions of PHP
|
||||
$phpVersionOnPath = Get-PHPVersion -phpRootPath "C:\tools\php72"
|
||||
|
||||
# Add details of available versions in Markdown
|
||||
$SoftwareName = "PHP (x64)"
|
||||
$Description = @"
|
||||
#### $phpVersionOnPath
|
||||
|
||||
_Environment:_
|
||||
* PATH: contains the location of php.exe version $phpVersionOnPath
|
||||
* PHPROOT: root directory of the PHP $phpVersionOnPath installation
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
23
images/win/scripts/Installers/Validate-Perl.ps1
Normal file
23
images/win/scripts/Installers/Validate-Perl.ps1
Normal file
@@ -0,0 +1,23 @@
|
||||
################################################################################
|
||||
## File: Validate-Perl.ps1
|
||||
## Desc: Validate perl
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'perl')
|
||||
{
|
||||
Write-Host "perl on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'perl is not on path'
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Perl"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $(perl -e 'print $^V')<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
28
images/win/scripts/Installers/Validate-PowershellCore.ps1
Normal file
28
images/win/scripts/Installers/Validate-PowershellCore.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Validate-PowershellCore.ps1
|
||||
## Desc: Validate Powershell Core
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'pwsh')
|
||||
{
|
||||
Write-Host "pwsh is on PATH"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "pwsh is not on PATH"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Powershell Core"
|
||||
|
||||
if(($(pwsh --version) | Out-String) -match 'PowerShell (?<version>.*)')
|
||||
{
|
||||
$PowershellVersion = $Matches.version
|
||||
}
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $PowershellVersion<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
45
images/win/scripts/Installers/Validate-Python.ps1
Normal file
45
images/win/scripts/Installers/Validate-Python.ps1
Normal file
@@ -0,0 +1,45 @@
|
||||
################################################################################
|
||||
## File: Validate-Python.ps1
|
||||
## Desc: Configure python on path based on what is installed in the tools cache
|
||||
## Must run after tools cache is downloaded and validated
|
||||
################################################################################
|
||||
|
||||
if(Get-Command -Name 'python')
|
||||
{
|
||||
Write-Host "Python $(& python -V 2>&1) on path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Python is not on path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$Python3Version = $(& python -V 2>&1)
|
||||
|
||||
if ($Python3Version -notlike "Python 3.*")
|
||||
{
|
||||
Write-Error "Python 3 is not in the PATH"
|
||||
}
|
||||
|
||||
|
||||
$python2path = $Env:AGENT_TOOLSDIRECTORY + '/Python/2.7*/x64'
|
||||
$python2Dir = Get-Item -Path $python2path
|
||||
|
||||
$env:Path = $python2Dir.FullName + ";" + $env:Path
|
||||
|
||||
$Python2Version = & $env:comspec "/s /c python --version 2>&1"
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Python (64 bit)"
|
||||
|
||||
$Description = @"
|
||||
#### $Python3Version
|
||||
_Environment:_
|
||||
* PATH: contains location of python.exe
|
||||
|
||||
#### $Python2Version
|
||||
|
||||
_Location:_ $Python2Path
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
53
images/win/scripts/Installers/Validate-Ruby.ps1
Normal file
53
images/win/scripts/Installers/Validate-Ruby.ps1
Normal file
@@ -0,0 +1,53 @@
|
||||
################################################################################
|
||||
## File: Validate-Ruby.ps1
|
||||
## Desc: Verify that Ruby is on the path and output version information.
|
||||
################################################################################
|
||||
|
||||
# Function that gets the version of Ruby at the specified path
|
||||
function Get-RubyVersion
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$rubyRootPath
|
||||
)
|
||||
|
||||
# Prepend to the path like: C:\hostedtoolcache\windows\Ruby\2.5.0\x64\bin
|
||||
$env:Path = "$rubyRootPath;" + $env:Path
|
||||
|
||||
# Extract the version from Ruby output like: ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mingw32]
|
||||
if( $(ruby --version) -match 'ruby (?<version>.*) \(.*' )
|
||||
{
|
||||
$rubyVersion = $Matches.version
|
||||
return $rubyVersion
|
||||
}
|
||||
|
||||
Write-Host "Unable to determine Ruby version at " + $rubyRootPath
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Verify that ruby is on the path
|
||||
if(Get-Command -Name 'ruby')
|
||||
{
|
||||
Write-Host "$(ruby --version) is on the path."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Ruby is not on the path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Default Ruby Version on Path
|
||||
$rubyExeOnPath = (Get-Command -Name 'ruby').Path
|
||||
$rubyBinOnPath = Split-Path -Path $rubyExeOnPath
|
||||
$rubyVersionOnPath = Get-RubyVersion -rubyRootPath $rubyBinOnPath
|
||||
|
||||
# Add details of available versions in Markdown
|
||||
$SoftwareName = "Ruby (x64)"
|
||||
$Description = @"
|
||||
#### $rubyVersionOnPath
|
||||
_Environment:_
|
||||
* Location: $rubyBinOnPath
|
||||
* PATH: contains the location of ruby.exe version $rubyVersionOnPath
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
34
images/win/scripts/Installers/Validate-Rust.ps1
Normal file
34
images/win/scripts/Installers/Validate-Rust.ps1
Normal file
@@ -0,0 +1,34 @@
|
||||
################################################################################
|
||||
## File: Validate-Rust.ps1
|
||||
## Desc: Verify that Rust is on the path and output version information.
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'rustc')
|
||||
{
|
||||
Push-Location -Path $env:UserProfile
|
||||
New-Item -Name ".rustup" -Value "C:\Rust\.rustup" -ItemType Junction
|
||||
New-Item -Name ".cargo" -Value "C:\Rust\.cargo" -ItemType Junction
|
||||
$RustcVersion = rustc --version
|
||||
Write-Host "$RustcVersion is on the path"
|
||||
Pop-Location
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "rustc is not on the path"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$RustPath = Split-Path (Get-Command -Name 'rustc').Path
|
||||
$RustcVersion -Match "\d+\.\d+\.\d+" | Out-Null
|
||||
$Version = $Matches[0]
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Rust (64-bit)"
|
||||
$Description = @"
|
||||
#### $Version
|
||||
_Location:_ $RustPath
|
||||
_Environment:_
|
||||
* PATH: contains the location of rustc.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
@@ -0,0 +1,37 @@
|
||||
# Validate the installation
|
||||
$env:PSModulePath = Get-SystemVariable "PSModulePath"
|
||||
$modules = Get-Module -Name SQLPS -ListAvailable
|
||||
Write-Host "The SQLPS Modules present are:"
|
||||
$modules | Select-Object Name,Version,Path | Format-Table
|
||||
|
||||
if ($modules) {
|
||||
$sqlPSVersion = $modules.Version
|
||||
}
|
||||
|
||||
# Validate the SQLserver PS module installation
|
||||
$modules = Get-Module -Name SQLServer -ListAvailable
|
||||
Write-Host "The SQLServer Modules present are:"
|
||||
$modules | Select-Object Name,Version,Path | Format-Table
|
||||
|
||||
if ($modules) {
|
||||
$sqlServerPSModuleVersion = $modules.Version
|
||||
}
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "SQLPS"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $sqlPSVersion
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "SQLServer PS"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $sqlServerPSModuleVersion
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
18
images/win/scripts/Installers/Validate-Sbt.ps1
Normal file
18
images/win/scripts/Installers/Validate-Sbt.ps1
Normal file
@@ -0,0 +1,18 @@
|
||||
################################################################################
|
||||
## File: Validate-Sbt.ps1
|
||||
## Team: CI-Platform
|
||||
## Desc: Validate sbt for Windows
|
||||
################################################################################
|
||||
|
||||
if((Get-Command -Name 'sbt'))
|
||||
{
|
||||
Write-Host "sbt is on the path"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "sbt is not on path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# This works around issue where sbt --script-version does some copies and breaks the build
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName "sbt" -DescriptionMarkdown ""
|
||||
@@ -0,0 +1,67 @@
|
||||
################################################################################
|
||||
## File: Validate-Chrome.ps1
|
||||
## Desc: Validate Google Chrome installation.
|
||||
################################################################################
|
||||
|
||||
$IEDriverPath = $env:IEWebDriver
|
||||
$GeckoDriverPath = $env:GeckoWebDriver
|
||||
$ChromeDriverPath = $env:ChromeWebDriver
|
||||
|
||||
if(($IEDriverPath -like "C:\SeleniumWebDrivers\IEDriver") -and ($GeckoDriverPath -like "C:\SeleniumWebDrivers\GeckoDriver") -and ($ChromeDriverPath -like "C:\SeleniumWebDrivers\ChromeDriver"))
|
||||
{
|
||||
|
||||
Write-Host "IEDriver installed at "
|
||||
(Get-Item "C:\SeleniumWebDrivers\IEDriver\IEDriverServer.exe").VersionInfo
|
||||
|
||||
|
||||
Write-Host "Gecko Driver installed at "
|
||||
(Get-Item "C:\SeleniumWebDrivers\GeckoDriver\geckodriver.exe").VersionInfo
|
||||
|
||||
|
||||
Write-Host "Chrome Driver installed at "
|
||||
(Get-Item "C:\SeleniumWebDrivers\ChromeDriver\chromedriver.exe").VersionInfo
|
||||
|
||||
$chromedriverversion = Get-Content -Path "C:\SeleniumWebDrivers\ChromeDriver\versioninfo.txt"
|
||||
$geckodriverversion = Get-Content -Path "C:\SeleniumWebDrivers\GeckoDriver\versioninfo.txt"
|
||||
$iedriverversion = Get-Content -Path "C:\SeleniumWebDrivers\IEDriver\versioninfo.txt"
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Selenium Web Drivers"
|
||||
|
||||
$Description = @"
|
||||
|
||||
#### Chrome Driver
|
||||
|
||||
_version:_
|
||||
$chromedriverversion
|
||||
|
||||
_Environment:_
|
||||
* ChromeWebDriver: location of chromedriver.exe
|
||||
|
||||
#### Gecko Driver
|
||||
|
||||
_version:_
|
||||
$geckodriverversion
|
||||
|
||||
_Environment:_
|
||||
* GeckoWebDriver: location of geckodriver.exe
|
||||
|
||||
#### IE Driver
|
||||
|
||||
_version:_
|
||||
$iedriverversion
|
||||
|
||||
_Environment:_
|
||||
* IEWebDriver: location of IEDriverServer.exe
|
||||
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
exit 0
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Selenium Web Drivers are not installed."
|
||||
exit 1
|
||||
}
|
||||
44
images/win/scripts/Installers/Validate-ServiceFabricSDK.ps1
Normal file
44
images/win/scripts/Installers/Validate-ServiceFabricSDK.ps1
Normal file
@@ -0,0 +1,44 @@
|
||||
################################################################################
|
||||
## File: Validate-ServiceFabricSDK.ps1
|
||||
## Desc: Validate ServiceFabricSDK
|
||||
################################################################################
|
||||
|
||||
$modules = Get-Module -Name ServiceFabric -ListAvailable
|
||||
|
||||
if(($modules | Measure-Object).Count -gt 0)
|
||||
{
|
||||
$modules
|
||||
}
|
||||
else {
|
||||
Write-Host "ServiceFabric Module is not present, it might not be installed"
|
||||
throw "ServiceFabric Module is not present, it might not be installed"
|
||||
}
|
||||
|
||||
|
||||
function Get-ServiceFabricSDKVersion
|
||||
{
|
||||
$regKey = "HKLM:\Software\Microsoft\Service Fabric SDK"
|
||||
$installedApplications = Get-ItemProperty -Path $regKey
|
||||
$Version = (Get-ItemProperty -Path $regKey).FabricSDKVersion
|
||||
return $Version
|
||||
}
|
||||
|
||||
|
||||
function Get-ServiceFabricVersion
|
||||
{
|
||||
$regKey = "HKLM:\Software\Microsoft\Service Fabric"
|
||||
$installedApplications = Get-ItemProperty -Path $regKey
|
||||
$Version = (Get-ItemProperty -Path $regKey).FabricVersion
|
||||
return $Version
|
||||
}
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Azure Service Fabric"
|
||||
|
||||
$Description = @"
|
||||
_SDK Version:_ $(Get-ServiceFabricSDKVersion)<br/>
|
||||
_Runtime Version:_ $(Get-ServiceFabricVersion)
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
28
images/win/scripts/Installers/Validate-Svn.ps1
Normal file
28
images/win/scripts/Installers/Validate-Svn.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Validate-Svn.ps1
|
||||
## Desc: Validate Subversion
|
||||
################################################################################
|
||||
|
||||
if(Get-Command -Name 'svn')
|
||||
{
|
||||
Write-Host "Subversion $(svn --version --quiet) is on the path."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Subversion is not on the path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
$svnVersion = $(svn --version --quiet)
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "Subversion"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $svnVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of svn.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
94
images/win/scripts/Installers/Validate-ToolCache.ps1
Normal file
94
images/win/scripts/Installers/Validate-ToolCache.ps1
Normal file
@@ -0,0 +1,94 @@
|
||||
################################################################################
|
||||
## File: Validate-ToolCache.ps1
|
||||
## Desc: Validate Tool Cache
|
||||
################################################################################
|
||||
|
||||
# Helpers
|
||||
function GetChildFolders {
|
||||
param (
|
||||
[Parameter(Mandatory = $True)]
|
||||
[string]$Path
|
||||
)
|
||||
return Get-ChildItem -Path $Path -Directory -Name
|
||||
}
|
||||
|
||||
function ToolcacheTest {
|
||||
param (
|
||||
[Parameter(Mandatory = $True)]
|
||||
[string]$SoftwareName,
|
||||
[Parameter(Mandatory = $True)]
|
||||
[string[]]$ExecTests,
|
||||
[Parameter(Mandatory = $True)]
|
||||
[string]$Note
|
||||
)
|
||||
if (Test-Path "$env:AGENT_TOOLSDIRECTORY\$SoftwareName")
|
||||
{
|
||||
$description = ""
|
||||
[array]$versions = GetChildFolders -Path "$env:AGENT_TOOLSDIRECTORY\$SoftwareName"
|
||||
if ($versions.count -gt 0){
|
||||
foreach ($version in $versions)
|
||||
{
|
||||
$architectures = GetChildFolders -Path "$env:AGENT_TOOLSDIRECTORY\$SoftwareName\$version"
|
||||
|
||||
Write-Host "$SoftwareName version - $version : $([system.String]::Join(",", $architectures))"
|
||||
|
||||
foreach ($arch in $architectures)
|
||||
{
|
||||
$path = "$env:AGENT_TOOLSDIRECTORY\$SoftwareName\$version\$arch"
|
||||
foreach ($test in $ExecTests)
|
||||
{
|
||||
if (Test-Path "$path\$test")
|
||||
{
|
||||
Write-Host "$SoftwareName($test) $version($arch) is successfully installed:"
|
||||
Write-Host (& "$path\$test" --version)
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "$SoftwareName($test) $version ($arch) is not installed"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
$description += "_Version:_ $version ($arch)<br/>"
|
||||
}
|
||||
}
|
||||
|
||||
$description += $Note
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $description
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "$env:AGENT_TOOLSDIRECTORY\$SoftwareName does not include any folders"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "$env:AGENT_TOOLSDIRECTORY\$SoftwareName does not exist"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Python test
|
||||
$PythonNote += @"
|
||||
<br/>
|
||||
> Note: These versions of Python are available through the [Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) task.
|
||||
"@
|
||||
$PythonTests = @("python.exe", "Scripts\pip.exe")
|
||||
ToolcacheTest -SoftwareName "Python" -ExecTests $PythonTests -Note $PythonNote
|
||||
|
||||
# PyPy test
|
||||
$PyPyNote += @"
|
||||
<br/>
|
||||
> Note: These versions of PyPy are available through the [Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) task.
|
||||
"@
|
||||
$PyPyTests = @("python.exe", "bin\pip.exe")
|
||||
ToolcacheTest -SoftwareName "PyPy" -ExecTests $PyPyTests -Note $PyPyNote
|
||||
|
||||
# Ruby test
|
||||
$RubyNote += @"
|
||||
<br/>
|
||||
> Note: These versions of Ruby are available through the [Use Ruby Version](https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/tool/use-ruby-version) task.
|
||||
"@
|
||||
$RubyTests = @("bin\ruby.exe")
|
||||
ToolcacheTest -SoftwareName "Ruby" -ExecTests $RubyTests -Note $RubyNote
|
||||
27
images/win/scripts/Installers/Validate-TypeScript.ps1
Normal file
27
images/win/scripts/Installers/Validate-TypeScript.ps1
Normal file
@@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
## File: Validate-TypeScript.ps1
|
||||
## Team: CI Build
|
||||
## Desc: Validate Typescript Installation
|
||||
################################################################################
|
||||
|
||||
if(Get-Command -Name 'tsc')
|
||||
{
|
||||
Write-Host "TypeScript $(tsc --version) is on the path."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "TypeScript is not on the path."
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
$typescriptVersion = $(tsc --version)
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "TypeScript"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $typescriptVersion<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
46
images/win/scripts/Installers/Validate-Vcpkg.ps1
Normal file
46
images/win/scripts/Installers/Validate-Vcpkg.ps1
Normal file
@@ -0,0 +1,46 @@
|
||||
################################################################################
|
||||
## File: Validate-Vcpkg.ps1
|
||||
## Desc: Validate vcpkg Cli
|
||||
################################################################################
|
||||
|
||||
if (Get-Command -Name 'Vcpkg')
|
||||
{
|
||||
Write-Host 'Vcpkg is succesfully installed:'
|
||||
vcpkg version | Write-Host
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host 'Vcpkg is not on PATH'
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($env:VCPKG_INSTALLATION_ROOT)
|
||||
{
|
||||
Write-Host "The VCPKG_INSTALLATION_ROOT environment variable is set"
|
||||
Write-Host $env:VCPKG_INSTALLATION_ROOT
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "The VCPKG_INSTALLATION_ROOT environment variable is not set"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
|
||||
# `vcpkg version` gives output like:
|
||||
# Vcpkg package management program version 2018.11.23-nohash
|
||||
#
|
||||
# See LICENSE.txt for license information.
|
||||
|
||||
$SoftwareName = 'Vcpkg'
|
||||
$(vcpkg version).Split([System.Environment]::NewLine)[0] -match "\d+.\d+.\d+.*"
|
||||
$VcpkgVersion = $Matches[0]
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $VcpkgVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location of the vcpkg directory
|
||||
* VCPKG_INSTALLATION_ROOT: root directory of the vcpkg installation
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
45
images/win/scripts/Installers/Validate-WinAppDriver.ps1
Normal file
45
images/win/scripts/Installers/Validate-WinAppDriver.ps1
Normal file
@@ -0,0 +1,45 @@
|
||||
################################################################################
|
||||
## File: Validate-WinAppDriver.ps1
|
||||
## Desc: Validate WinAppDriver installation
|
||||
################################################################################
|
||||
|
||||
$wad = "Windows Application Driver";
|
||||
if (${Env:ProgramFiles(x86)})
|
||||
{
|
||||
$wadPath = "${Env:ProgramFiles(x86)}\$wad"
|
||||
}
|
||||
else
|
||||
{
|
||||
$wadPath = "${Env:ProgramFiles}\$wad"
|
||||
}
|
||||
|
||||
if(Test-Path $wadPath -PathType Any)
|
||||
{
|
||||
Write-Host "WinAppDriver directory found."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Failed to locate WinAppDriver directory. Exiting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
#Validate if Developer Mode is enabled
|
||||
$path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock";
|
||||
if((Get-ItemProperty -Path $path | Select-Object -ExpandProperty "AllowDevelopmentWithoutDevLicense") -eq 1)
|
||||
{
|
||||
Write-Host "Developer Mode is successfully provisioned."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Developer Mode was not successfully provisioned."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
$SoftwareName = "WinAppDriver"
|
||||
$version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe").FileVersion
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
145
images/win/scripts/Installers/Windows2019/Initialize-VM.ps1
Normal file
145
images/win/scripts/Installers/Windows2019/Initialize-VM.ps1
Normal file
@@ -0,0 +1,145 @@
|
||||
################################################################################
|
||||
## File: Initialize-VM.ps1
|
||||
## Desc: VM initialization script, machine level configuration
|
||||
################################################################################
|
||||
|
||||
function Disable-InternetExplorerESC {
|
||||
$AdminKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"
|
||||
$UserKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}"
|
||||
Set-ItemProperty -Path $AdminKey -Name "IsInstalled" -Value 0 -Force
|
||||
Set-ItemProperty -Path $UserKey -Name "IsInstalled" -Value 0 -Force
|
||||
Stop-Process -Name Explorer -Force -ErrorAction Continue
|
||||
Write-Host "IE Enhanced Security Configuration (ESC) has been disabled."
|
||||
}
|
||||
|
||||
function Disable-InternetExplorerWelcomeScreen {
|
||||
$AdminKey = "HKLM:\Software\Policies\Microsoft\Internet Explorer\Main"
|
||||
New-Item -Path $AdminKey -Value 1 -Force
|
||||
Set-ItemProperty -Path $AdminKey -Name "DisableFirstRunCustomize" -Value 1 -Force
|
||||
Write-Host "Disabled IE Welcome screen"
|
||||
}
|
||||
|
||||
function Disable-UserAccessControl {
|
||||
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "ConsentPromptBehaviorAdmin" -Value 00000000 -Force
|
||||
Write-Host "User Access Control (UAC) has been disabled."
|
||||
}
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
Write-Host "Setup PowerShellGet"
|
||||
# Set-PSRepository -InstallationPolicy Trusted -Name PSGallery
|
||||
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
|
||||
Install-Module -Name PowerShellGet -Force
|
||||
Set-PSRepository -InstallationPolicy Trusted -Name PSGallery
|
||||
|
||||
|
||||
Write-Host "Disable Antivirus"
|
||||
Set-MpPreference -DisableRealtimeMonitoring $true
|
||||
|
||||
# Disable Windows Update
|
||||
$AutoUpdatePath = "HKLM:SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
|
||||
If (Test-Path -Path $AutoUpdatePath) {
|
||||
Set-ItemProperty -Path $AutoUpdatePath -Name NoAutoUpdate -Value 1
|
||||
Write-Host "Disabled Windows Update"
|
||||
}
|
||||
else {
|
||||
Write-Host "Windows Update key does not exist"
|
||||
}
|
||||
|
||||
# Install .NET Framework 3.5 (required by Chocolatey)
|
||||
Install-WindowsFeature -Name NET-Framework-Features -IncludeAllSubFeature
|
||||
# Explicitly install all 4.7 sub features to include ASP.Net.
|
||||
# As of 1/16/2019, WinServer 19 lists .Net 4.7 as NET-Framework-45-Features
|
||||
Install-WindowsFeature -Name NET-Framework-45-Features -IncludeAllSubFeature
|
||||
|
||||
Write-Host "Disable UAC"
|
||||
Disable-UserAccessControl
|
||||
|
||||
Write-Host "Disable IE Welcome Screen"
|
||||
Disable-InternetExplorerWelcomeScreen
|
||||
|
||||
Write-Host "Disable IE ESC"
|
||||
Disable-InternetExplorerESC
|
||||
|
||||
Write-Host "Setting local execution policy"
|
||||
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine -ErrorAction Continue | Out-Null
|
||||
Get-ExecutionPolicy -List
|
||||
|
||||
Write-Host "Enable long path behavior"
|
||||
# See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation
|
||||
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1
|
||||
|
||||
Write-Host "Install chocolatey"
|
||||
$chocoExePath = 'C:\ProgramData\Chocolatey\bin'
|
||||
|
||||
if ($($env:Path).ToLower().Contains($($chocoExePath).ToLower())) {
|
||||
Write-Host "Chocolatey found in PATH, skipping install..."
|
||||
Exit
|
||||
}
|
||||
|
||||
# Add to system PATH
|
||||
$systemPath = [Environment]::GetEnvironmentVariable('Path', [System.EnvironmentVariableTarget]::Machine)
|
||||
$systemPath += ';' + $chocoExePath
|
||||
[Environment]::SetEnvironmentVariable("PATH", $systemPath, [System.EnvironmentVariableTarget]::Machine)
|
||||
|
||||
# Update local process' path
|
||||
$userPath = [Environment]::GetEnvironmentVariable('Path', [System.EnvironmentVariableTarget]::User)
|
||||
if ($userPath) {
|
||||
$env:Path = $systemPath + ";" + $userPath
|
||||
}
|
||||
else {
|
||||
$env:Path = $systemPath
|
||||
}
|
||||
|
||||
# Run the installer
|
||||
Invoke-Expression ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
|
||||
|
||||
# Turn off confirmation
|
||||
choco feature enable -n allowGlobalConfirmation
|
||||
|
||||
# Install webpi
|
||||
choco install webpicmd -y
|
||||
|
||||
# Expand disk size of OS drive
|
||||
|
||||
New-Item -Path d:\ -Name cmds.txt -ItemType File -Force
|
||||
|
||||
Add-Content -Path d:\cmds.txt "SELECT VOLUME=C`r`nEXTEND"
|
||||
|
||||
$expandResult = (diskpart /s 'd:\cmds.txt')
|
||||
|
||||
Write-Host $expandResult
|
||||
|
||||
Write-Host "Disk sizes after expansion"
|
||||
|
||||
wmic logicaldisk get size,freespace,caption
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
|
||||
$Content = @"
|
||||
# Azure Pipelines Hosted Windows 2019
|
||||
|
||||
The following software is installed on machines in the Azure Pipelines **Hosted Windows 2019** (v$env:ImageVersion) pool.
|
||||
|
||||
Components marked with **\*** have been upgraded since the previous version of the image.
|
||||
|
||||
"@
|
||||
|
||||
Add-ContentToMarkdown -Content $Content
|
||||
|
||||
|
||||
$SoftwareName = "Chocolatey"
|
||||
|
||||
if( $( $(choco version) | Out-String) -match 'Chocolatey v(?<version>.*).*' )
|
||||
{
|
||||
$chocoVersion = $Matches.version.Trim()
|
||||
}
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $chocoVersion<br/>
|
||||
_Environment:_
|
||||
* PATH: contains location for choco.exe
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
28
images/win/scripts/Installers/Windows2019/Install-Python.ps1
Normal file
28
images/win/scripts/Installers/Windows2019/Install-Python.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
################################################################################
|
||||
## File: Install-Python.ps1
|
||||
## Desc: Configure python on path with 3.7.* version from the tools cache
|
||||
## Must run after tools cache is setup
|
||||
################################################################################
|
||||
|
||||
Import-Module -Name ImageHelpers -Force
|
||||
|
||||
$python37path = $Env:AGENT_TOOLSDIRECTORY + '/Python/3.7*/x64'
|
||||
$pythonDir = Get-Item -Path $python37path
|
||||
|
||||
if($pythonDir -is [array])
|
||||
{
|
||||
Write-Host "More than one python 3.7.* installations found"
|
||||
Write-Host $pythonDir
|
||||
exit 1
|
||||
}
|
||||
|
||||
$currentPath = Get-MachinePath
|
||||
|
||||
if ($currentPath | Select-String -SimpleMatch $pythonDir.FullName)
|
||||
{
|
||||
Write-Host $pythonDir.FullName ' is already in PATH'
|
||||
exit 0
|
||||
}
|
||||
|
||||
Add-MachinePathItem -PathItem $pythonDir.FullName
|
||||
Add-MachinePathItem -PathItem "$($pythonDir.FullName)\Scripts"
|
||||
188
images/win/scripts/Installers/Windows2019/Install-VS2019.ps1
Normal file
188
images/win/scripts/Installers/Windows2019/Install-VS2019.ps1
Normal file
@@ -0,0 +1,188 @@
|
||||
################################################################################
|
||||
## File: Install-VS2019.ps1
|
||||
## Desc: Install Visual Studio 2019
|
||||
################################################################################
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Function InstallVS
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$WorkLoads,
|
||||
[String]$Sku,
|
||||
[String] $VSBootstrapperURL
|
||||
)
|
||||
|
||||
$exitCode = -1
|
||||
|
||||
try
|
||||
{
|
||||
Write-Host "Enable short name support on Windows needed for Xamarin Android AOT, defaults appear to have been changed in Azure VMs"
|
||||
$shortNameEnableProcess = Start-Process -FilePath fsutil.exe -ArgumentList ('8dot3name', 'set', '0') -Wait -PassThru
|
||||
$shortNameEnableExitCode = $shortNameEnableProcess.ExitCode
|
||||
|
||||
if ($shortNameEnableExitCode -ne 0)
|
||||
{
|
||||
Write-Host -Object 'Enabling short name support on Windows failed. This needs to be enabled prior to VS 2017 install for Xamarin Andriod AOT to work.'
|
||||
exit $shortNameEnableExitCode
|
||||
}
|
||||
|
||||
Write-Host "Downloading Bootstrapper ..."
|
||||
Invoke-WebRequest -Uri $VSBootstrapperURL -OutFile "${env:Temp}\vs_$Sku.exe"
|
||||
|
||||
$FilePath = "${env:Temp}\vs_$Sku.exe"
|
||||
$Arguments = ('/c', $FilePath, $WorkLoads, '--quiet', '--norestart', '--wait', '--nocache' )
|
||||
|
||||
Write-Host "Starting Install ..."
|
||||
$process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru
|
||||
$exitCode = $process.ExitCode
|
||||
|
||||
if ($exitCode -eq 0 -or $exitCode -eq 3010)
|
||||
{
|
||||
Write-Host -Object 'Installation successful'
|
||||
return $exitCode
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host -Object "Non zero exit code returned by the installation process : $exitCode."
|
||||
|
||||
# this wont work because of log size limitation in extension manager
|
||||
# Get-Content $customLogFilePath | Write-Host
|
||||
|
||||
exit $exitCode
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Host -Object "Failed to install Visual Studio. Check the logs for details in $customLogFilePath"
|
||||
Write-Host -Object $_.Exception.Message
|
||||
exit -1
|
||||
}
|
||||
}
|
||||
|
||||
$WorkLoads = '--allWorkloads --includeRecommended ' + `
|
||||
'--add Component.Dotfuscator ' + `
|
||||
'--add Component.Linux.CMake ' + `
|
||||
'--add Component.UnityEngine.x64 ' + `
|
||||
'--add Component.UnityEngine.x86 ' + `
|
||||
'--add Component.Unreal.Android ' + `
|
||||
'--add Microsoft.Component.Azure.DataLake.Tools ' + `
|
||||
'--add Microsoft.Component.CookiecutterTools ' + `
|
||||
'--add Microsoft.Component.PythonTools.Miniconda ' + `
|
||||
'--add Microsoft.Component.PythonTools.Web ' + `
|
||||
'--add Microsoft.Component.VC.Runtime.UCRTSDK ' + `
|
||||
'--add Microsoft.Net.ComponentGroup.4.6.2.DeveloperTools ' + `
|
||||
'--add Microsoft.Net.ComponentGroup.4.7.1.DeveloperTools ' + `
|
||||
'--add Microsoft.Net.ComponentGroup.4.7.DeveloperTools ' + `
|
||||
'--add Microsoft.VisualStudio.Component.AspNet45 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Azure.Kubernetes.Tools ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Azure.MobileAppsSdk ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Azure.Storage.AzCopy ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Debugger.JustInTime ' + `
|
||||
'--add Microsoft.VisualStudio.Component.DslTools ' + `
|
||||
'--add Microsoft.VisualStudio.Component.EntityFramework ' + `
|
||||
'--add Microsoft.VisualStudio.Component.FSharp.Desktop ' + `
|
||||
'--add Microsoft.VisualStudio.Component.LinqToSql ' + `
|
||||
'--add Microsoft.VisualStudio.Component.PortableLibrary ' + `
|
||||
'--add Microsoft.VisualStudio.Component.TeamOffice ' + `
|
||||
'--add Microsoft.VisualStudio.Component.TestTools.CodedUITest ' + `
|
||||
'--add Microsoft.VisualStudio.Component.TestTools.WebLoadTest ' + `
|
||||
'--add Microsoft.VisualStudio.Component.UWP.VC.ARM64 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.140 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.ATL.ARM ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.ATLMFC ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.CLI.Support ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.CMake.Project ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.DiagnosticTools ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.MFC.ARM ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.MFC.ARM.Spectre ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest ' + `
|
||||
'--add Microsoft.VisualStudio.Component.VC.v141 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Windows10SDK.16299 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Windows10SDK.17134 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Windows10SDK.17763 ' + `
|
||||
'--add Microsoft.VisualStudio.Component.Windows10SDK.18362 ' + `
|
||||
'--add Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices ' + `
|
||||
'--add Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools ' + `
|
||||
'--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang ' + `
|
||||
'--add Microsoft.VisualStudio.ComponentGroup.Web.CloudTools ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.Azure ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.Data ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.DataScience ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.ManagedDesktop ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.ManagedGame ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.NativeCrossPlat ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.NativeDesktop ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.NativeGame ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.NativeMobile ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.NetCoreTools ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.NetCrossPlat ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.NetWeb ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.Node ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.Office ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.Python ' + `
|
||||
'--remove Component.CPython3.x64 ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.Universal ' + `
|
||||
'--add Microsoft.VisualStudio.Workload.VisualStudioExtension'
|
||||
|
||||
|
||||
$ReleaseInPath = 'Enterprise'
|
||||
$Sku = 'Enterprise'
|
||||
$VSBootstrapperURL = 'https://aka.ms/vs/16/release/vs_Enterprise.exe'
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# Install VS
|
||||
$exitCode = InstallVS -WorkLoads $WorkLoads -Sku $Sku -VSBootstrapperURL $VSBootstrapperURL
|
||||
|
||||
# Find the version of VS installed for this instance
|
||||
# Only supports a single instance
|
||||
$vsProgramData = Get-Item -Path "C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances"
|
||||
$instanceFolders = Get-ChildItem -Path $vsProgramData.FullName
|
||||
|
||||
if($instanceFolders -is [array])
|
||||
{
|
||||
Write-Host "More than one instance installed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$catalogContent = Get-Content -Path ($instanceFolders.FullName + '\catalog.json')
|
||||
$catalog = $catalogContent | ConvertFrom-Json
|
||||
$version = $catalog.info.id
|
||||
Write-Host "Visual Studio version" $version "installed"
|
||||
|
||||
# Initialize Visual Studio Experimental Instance
|
||||
&"C:\Program Files (x86)\Microsoft Visual Studio\2019\$ReleaseInPath\Common7\IDE\devenv.exe" /RootSuffix Exp /ResetSettings General.vssettings /Command File.Exit
|
||||
|
||||
# Updating content of MachineState.json file to disable autoupdate of VSIX extensions
|
||||
$newContent = '{"Extensions":[{"Key":"1e906ff5-9da8-4091-a299-5c253c55fdc9","Value":{"ShouldAutoUpdate":false}},{"Key":"Microsoft.VisualStudio.Web.AzureFunctions","Value":{"ShouldAutoUpdate":false}}],"ShouldAutoUpdate":false,"ShouldCheckForUpdates":false}'
|
||||
Set-Content -Path "C:\Program Files (x86)\Microsoft Visual Studio\2019\$ReleaseInPath\Common7\IDE\Extensions\MachineState.json" -Value $newContent
|
||||
|
||||
|
||||
# Adding description of the software to Markdown
|
||||
|
||||
$SoftwareName = "Visual Studio 2019 Enterprise"
|
||||
|
||||
$Description = @"
|
||||
_Version:_ $version<br/>
|
||||
_Location:_ C:\Program Files (x86)\Microsoft Visual Studio\2019\$ReleaseInPath
|
||||
|
||||
The following workloads and components are installed with Visual Studio 2019:
|
||||
"@
|
||||
|
||||
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
|
||||
|
||||
# Adding explicitly added Workloads details to markdown by parsing $Workloads
|
||||
Add-ContentToMarkdown -Content $($WorkLoads.Split('--') | % { if( ($_.Split(" "))[0] -like "add") { "* " +($_.Split(" "))[1] } } )
|
||||
|
||||
|
||||
exit $exitCode
|
||||
53
images/win/scripts/Installers/Windows2019/Install-WDK.ps1
Normal file
53
images/win/scripts/Installers/Windows2019/Install-WDK.ps1
Normal file
@@ -0,0 +1,53 @@
|
||||
################################################################################
|
||||
## File: Install-WDK.ps1
|
||||
## Desc: Install the Windows Driver Kit
|
||||
################################################################################
|
||||
|
||||
# Version: 10.0.17763.0
|
||||
# Update Validate-WDK.ps1 if the version changes!
|
||||
# There doesn't seem to be any way to check the version programmatically
|
||||
|
||||
# Requires Windows SDK with the same version number as the WDK
|
||||
$winSdkUrl = "https://go.microsoft.com/fwlink/p/?LinkID=2023014"
|
||||
$wdkUrl = "https://go.microsoft.com/fwlink/?linkid=2026156"
|
||||
|
||||
# `winsdksetup.exe /features + /quiet` installs all features without showing the GUI
|
||||
$sdkExitCode = Install-EXE -Url $winSdkUrl -Name "winsdksetup.exe" -ArgumentList ("/features", "+", "/quiet")
|
||||
|
||||
if ($sdkExitCode -ne 0)
|
||||
{
|
||||
Write-Host "Failed to install the Windows SDK."
|
||||
exit $sdkExitCode
|
||||
}
|
||||
|
||||
# `wdksetup.exe /features + /quiet` installs all features without showing the GUI
|
||||
$wdkExitCode = Install-EXE -Url $wdkUrl -Name "wdksetup.exe" -ArgumentList ("/features", "+", "/quiet")
|
||||
|
||||
if ($wdkExitCode -ne 0)
|
||||
{
|
||||
Write-Host "Failed to install the Windows Driver Kit."
|
||||
exit $wdkExitCode
|
||||
}
|
||||
|
||||
# Need to install the VSIX to get the build targets when running VSBuild
|
||||
# Write-Host "Installing WDK.vsix"
|
||||
<# ISSUE - VSIX installer failing on VS2019
|
||||
$process = Start-Process `
|
||||
-FilePath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\VSIXInstaller.exe" `
|
||||
-ArgumentList ("/quiet", '"C:\Program Files (x86)\Windows Kits\10\Vsix\WDK.vsix"') `
|
||||
-Wait `
|
||||
-PassThru
|
||||
|
||||
$exitCode = $process.ExitCode
|
||||
|
||||
if ($exitCode -eq 0 -or $exitCode -eq 1001) # 1001 means the extension is already installed
|
||||
{
|
||||
Write-Host "WDK.vsix installed successfully"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Unsuccessful exit code returned by the installation process: $exitCode."
|
||||
}
|
||||
|
||||
exit $exitCode
|
||||
#>
|
||||
53
images/win/scripts/Installers/Windows2019/Install-Wix.ps1
Normal file
53
images/win/scripts/Installers/Windows2019/Install-Wix.ps1
Normal file
@@ -0,0 +1,53 @@
|
||||
################################################################################
|
||||
## File: Install-Wix.ps1
|
||||
## Desc: Install WIX.
|
||||
################################################################################
|
||||
function Install-VsixExtension
|
||||
{
|
||||
Param
|
||||
(
|
||||
[String]$Url,
|
||||
[String]$Name
|
||||
)
|
||||
|
||||
$ReleaseInPath = 'Enterprise'
|
||||
$exitCode = -1
|
||||
|
||||
try
|
||||
{
|
||||
Write-Host "Downloading $Name..."
|
||||
$FilePath = "${env:Temp}\$Name"
|
||||
|
||||
Invoke-WebRequest -Uri $Url -OutFile $FilePath
|
||||
|
||||
$ArgumentList = ('/quiet', $FilePath)
|
||||
|
||||
Write-Host "Starting Install $Name..."
|
||||
$process = Start-Process -FilePath "C:\Program Files (x86)\Microsoft Visual Studio\2019\$ReleaseInPath\Common7\IDE\VSIXInstaller.exe" -ArgumentList $ArgumentList -Wait -PassThru
|
||||
$exitCode = $process.ExitCode
|
||||
|
||||
if ($exitCode -eq 0 -or $exitCode -eq 3010)
|
||||
{
|
||||
Write-Host -Object 'Installation successful'
|
||||
return $exitCode
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host -Object "Non zero exit code returned by the installation process : $exitCode."
|
||||
return $exitCode
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Host -Object "Failed to install the Extension $Name"
|
||||
Write-Host -Object $_.Exception.Message
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
choco install wixtoolset -y --force
|
||||
|
||||
#Installing VS extension 'Wix Toolset Visual Studio 2019 Extension'
|
||||
$exitCode = Install-VsixExtension -Url 'https://wixtoolset.gallerycdn.vsassets.io/extensions/wixtoolset/wixtoolsetvisualstudio2019extension/1.0.0.4/1563296438961/Votive2019.vsix' -Name 'Votive2019.vsix'
|
||||
#return $exitCode
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user