1
+ # Set up preferences for output
1
2
$ErrorActionPreference = " Continue"
2
3
$VerbosePreference = " Continue"
4
+ $ProgressPreference = " SilentlyContinue"
3
5
4
- # Install Chocolatey
5
- [System.Net.ServicePointManager ]::SecurityProtocol = [System.Net.SecurityProtocolType ]::Tls12
6
- $env: chocolateyUseWindowsCompression = ' true'
7
- Invoke-WebRequest https:// chocolatey.org/ install.ps1 - UseBasicParsing | Invoke-Expression
8
-
9
- # Add Chocolatey to powershell profile
10
- $ChocoProfileValue = @'
11
- $ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
12
- if (Test-Path($ChocolateyProfile)) {
13
- Import-Module "$ChocolateyProfile"
6
+ # Print out our powershell version just so we know what the default is.
7
+ $PSVersionTable
8
+
9
+ # Just checking disk space
10
+ Get-PSDrive C | Select-Object Used, Free
11
+
12
+ # Make sure that we have a profile to set and write to. If not, create it.
13
+ $powershellProfile = " C:\Users\Administrator\Documents\WindowsPowerShell\profile.ps1"
14
+ Write-Output " Checking for profile at $powershellProfile "
15
+ if (! (Test-Path - Path $powershellProfile )) {
16
+ Write-Output " Creating $powershellProfile cause it doesn't exist yet"
17
+ New-Item - Type File - Path $powershellProfile - Force
18
+ }
19
+ Write-Output " Checking for profile at $profile "
20
+ if (! (Test-Path - Path $profile )) {
21
+ Write-Output " Creating $profile cause it doesn't exist yet"
22
+ New-Item - Type File - Path $profile - Force
14
23
}
15
24
16
- refreshenv
17
- '@
18
- # Write it to the $profile location
19
- Set-Content - Path " $PsHome \Microsoft.PowerShell_profile.ps1" - Value $ChocoProfileValue - Force
20
- # Source it
21
- . " $PsHome \Microsoft.PowerShell_profile.ps1"
25
+ # Install Chocolatey
26
+ Write-Output " Setting up Chocolatey install execution policy"
27
+ Get-ExecutionPolicy
28
+ Set-ExecutionPolicy Bypass - Scope Process - Force
29
+ [System.Net.ServicePointManager ]::SecurityProtocol = [System.Net.ServicePointManager ]::SecurityProtocol -bor 3072
30
+ Write-Output " Downloading and running Chocolatey install script"
31
+ # NOTE : We use the System.Net.WebClient object, because using Invoke-Webrequest is ridiculously slow with larger files. Using this halves download times.
32
+ iex ((New-Object System.Net.WebClient).DownloadString(' https://community.chocolatey.org/install.ps1' ))
33
+ choco feature enable - n allowGlobalConfirmation
22
34
23
- refreshenv
35
+ # NOTE / IMPORTANT : DO NOT SET THE POWERSHELL PROFILE. FOR SOME REASON IT BREAKS THE SFTP PROVISIONER.
36
+ # Likely due to the fact that the powershell profile will generate output when it is sourced, which causes
37
+ # a "Error processing command: Error uploading ps script containing env vars: sftpSession error: packet too long"
38
+ # failure when trying to upload the next script.
24
39
25
- Write-Host " Installing cloudwatch agent..."
26
- Invoke-WebRequest - Uri https:// s3.amazonaws.com / amazoncloudwatch- agent/ windows/ amd64/ latest/ amazon- cloudwatch- agent.msi - OutFile C:\amazon- cloudwatch- agent.msi
40
+ # Install cloudwatch agent
41
+ Write-Output " Installing cloudwatch agent..."
42
+ $cloudwatchURL = " https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi"
43
+ $cloudwatchLocation = " C:\amazon-cloudwatch-agent.msi"
27
44
$cloudwatchParams = ' /i' , ' C:\amazon-cloudwatch-agent.msi' , ' /qn' , ' /L*v' , ' C:\CloudwatchInstall.log'
28
- Start-Process " msiexec.exe" $cloudwatchParams - Wait - NoNewWindow
29
- Remove-Item C:\amazon- cloudwatch- agent.msi
45
+ $webClient = New-Object System.Net.WebClient
46
+ $webClient.Downloadfile ($cloudwatchURL , $cloudwatchLocation )
47
+ Write-Output " Installing Cloudwatch agent from $cloudwatchLocation "
48
+ Start-Process " msiexec.exe" - ArgumentList $cloudwatchParams - Wait - NoNewWindow
49
+ Remove-Item $cloudwatchLocation
30
50
31
51
# Install dependent tools
32
- Write-Host " Installing additional development tools"
52
+ Write-Output " Installing additional development tools"
33
53
choco install git awscli - y
34
54
refreshenv
35
55
36
- Write-Host " Creating actions-runner directory for the GH Action installtion"
56
+ # Install Github Actions runner
57
+ Write-Output " Creating actions-runner directory for the GH Action installtion"
37
58
New-Item - ItemType Directory - Path C:\actions- runner ; Set-Location C:\actions- runner
38
-
39
- Write-Host " Downloading the GH Action runner from ${action_runner_url} "
40
- Invoke-WebRequest - Uri ${action_runner_url} - OutFile actions- runner.zip
41
-
42
- Write-Host " Un-zip action runner"
59
+ Write-Output " Downloading the GH Action runner from ${action_runner_url} "
60
+ # Invoke-WebRequest -Uri ${action_runner_url} -OutFile actions-runner.zip
61
+ $webClient.Downloadfile (" ${action_runner_url} " , " $PWD \actions-runner.zip" )
62
+ Write-Output " Unzip action runner"
43
63
Expand-Archive - Path actions- runner.zip - DestinationPath .
44
-
45
- Write-Host " Delete zip file"
64
+ Write-Output " Delete zip file"
46
65
Remove-Item actions- runner.zip
47
66
48
67
$action = New-ScheduledTaskAction - WorkingDirectory " C:\actions-runner" - Execute " PowerShell.exe" - Argument " -File C:\start-runner.ps1"
49
68
$trigger = New-ScheduledTaskTrigger - AtStartup
50
69
Register-ScheduledTask - TaskName " runnerinit" - Action $action - Trigger $trigger - User System - RunLevel Highest - Force
51
70
52
- C:\ProgramData\Amazon\EC2- Windows\Launch\Scripts\InitializeInstance.ps1 - Schedule
71
+ # TODO : The line below failed on my instances. I removed it, and everything works just fine. Something is funky here.
72
+ C:\ProgramData\Amazon\EC2- Windows\Launch\Scripts\InitializeInstance.ps1 - Schedule
73
+ Write-Output " Finished running windows provisioner."
0 commit comments