<# .Synopsis A script used to install and configure the Azure Pipelines Agent with some backwards Windows compatibility. .Description .Notes Version : 0.2 Author : Jason Elliott Digital Garden : https://cloudysideup.com Disclaimer: This script is provided "AS IS" with no warranties. #> $path32 = "$HOME\Downloads\vsts-agent-win-x86-2.172.2.zip" $path64 = "$HOME\Downloads\vsts-agent-win-x64-2.172.2.zip" $url32 = "https://vstsagentpackage.azureedge.net/agent/2.172.2/vsts-agent-win-x86-2.172.2.zip" $url64 = "https://vstsagentpackage.azureedge.net/agent/2.172.2/vsts-agent-win-x64-2.172.2.zip" # Enter information required for agent configuration $AgentInstallDir = (Read-Host -Prompt "Enter Drive Letter For Install: ") + ":\AzurePipelinesAgent" $urlADO = "https://dev.azure.com/" + (Read-Host -Prompt "Enter Azure DevOps Organization name: ") $teamName = (Read-Host -prompt "Enter team abbreviation (no spaces): ") $agentName = $teamName + (Read-Host -Prompt "Enter Build Server Hostname: ") $poolName = (Read-Host -Prompt "Enter Agent Pool Name: ") $token = Read-Host -Prompt "Enter or Paste Personal Access Token (not expired) with Scope of Access to Read & Manage Agent Pool: " -AsSecureString # Get .Net Full Version $dotNetVersion = ` Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -name Version, Release -EA 0 | Where-Object { $_.PSChildName -eq "Full"} | Select-Object Release -expandproperty Release # Check that we're running from an elevated PowerShell window Write-Host "Checking for elevated permissions..." If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` [Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning "Insufficient permissions to run this script. Open the PowerShell console as an administrator and run this script again." Break } Else { Write-Host "Checking Windows Version..." -ForegroundColor Green } # Version of Windows (Windows 7, 8.1, 10, Server 2008 R2 SP1 or higher) If ([System.Environment]::OSVersion.Version.Major -lt 6) { Write-Warning "Windows 7/Server 2008 R2 SP1 or higher required" Break } Else { Write-Host "Checking PowerShell Version..." -ForegroundColor Green } # PowerShell 3.0 or higher If ($PSVersionTable.PSVersion.Major -lt 3) { Write-Warning "PowerShell 3.0 or higher required" Break } Else { Write-Host "Checking .Net Framework Version..." -ForegroundColor Green } # .NET Framework 4.6.2 or higher If ($dotNetVersion -lt 394802) { Write-Warning ".Net Framework 4.6.2 or higher required" Break } Else { Write-Host "Installing and Configuring Azure Pipelines Agent..." } # download, extract and install Azure Pipelines Agent Try { New-Item -ItemType "directory" -Path $AgentInstallDir Set-Location $AgentInstallDir $client = New-Object System.Net.WebClient If((Get-CimInStance Win32_OperatingSystem).OSArchitecture.Trim() -eq "64-Bit") { $client.DownloadFile($url64, $path64) Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$HOME\Downloads\vsts-agent-win-x64-2.172.2.zip", "$PWD") .\config.cmd --unattended --url $urlADO --auth pat --token [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($token)) --pool $poolName --agent $agentName } Else { $client.DownloadFile($url32, $path32) Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$HOME\Downloads\vsts-agent-win-x86-2.172.2.zip", "$PWD") .\config.cmd --unattended --url $urlADO --auth pat --token [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($token)) --pool $poolName --agent $agentName } } Catch { Add-Content c:\Azure_Pipelines_Agent_Install_Fails.txt"`n$ENV:computername" }