-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
NewMachineSetup.ps1
145 lines (132 loc) · 4.26 KB
/
NewMachineSetup.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
Clear-Host
# req admin rights, so restart if not admin
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs;
exit
}
# Begin logfile
$username= Get-Content env:username
$computer = Get-Content env:computername
$Logfile = "C:\$computer-$username-$(Get-Date -Format "MM/dd/yyyy-HH:mm")-install.log"
Start-Transcript -path $LogFile -append
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
# Install Chocolatey - We will use this for all our installs and upgrades
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
# Define Dir Structure
New-Item -Path "c:\" -Name "workspace" -ItemType "Directory"
# Define Choco Repo
$chocorepo = "https://chocolatey.org/api/v2//"
$windowsCaption = (Get-CimInstance -ClassName Win32_OperatingSystem).Caption
$windowsUpdate = $false
$chocolateypackages = Get-Content chocolatey.txt
$features = Get-Content features.txt
function Install-With-Choco()
{
param(
[Parameter(Mandatory=$true)][string]$package,
[Parameter(Mandatory=$false)][string]$version
)
Write-Output "Starting install of $package at $(Get-Date -Format "MM/dd/yyyy HH:mm")"
if (!$version)
{
choco install $package -y --source=$chocorepo --ignore-checksums
}
else
{
choco install $package -y --source=$chocorepo -v $version --ignore-checksums
}
$exitCode = $LASTEXITCODE
Write-Verbose "Exit code was $exitCode"
$validExitCodes = @(0, 1605, 1614, 1641, 3010)
if ($validExitCodes -contains $exitCode)
{
Write-Output "The package $package was installed successfully"
}
else
{
Write-Output "The package $package was not correctly installed"
}
}
function Install-Optional-Feature()
{
param(
[Parameter(Mandatory=$true)][string]$feature
)
Write-Output "Starting install of $feature at $(Get-Date -Format "MM/dd/yyyy HH:mm")"
choco install $feature --source windowsfeatures
}
function Install-PIP()
{
Write-Output "Starting install of requirements.txt at $(Get-Date -Format "MM/dd/yyyy HH:mm")"
pip install -r requirements.txt
}
function Install-Gemfile()
{
Write-Output "Starting install of Gemfile at $(Get-Date -Format "MM/dd/yyyy HH:mm")"
bundle install
}
function EnableHyperV()
{
Install-Optional-Feature "Microsoft-Hyper-V"
}
function Install-Windows-Update()
{
$service = Get-Service -Name wuauserv -ErrorAction SilentlyContinue
if($null -eq $service)
{
Write-Output "Windows Update Service Does Not Exist."
}
else
{
if($serice.Status -eq "Disabled")
{
Write-Output "Attempting to enable " $service.name
Set-Service -Name $service.name -StartupType Automatic -Force
}
if($service.Status -eq "Stopped")
{
Write-Output "Attempting to start " $service.name
Start-Service -Name $service.Name
}
Install-Module PSWindowsUpdate -Force
Get-WindowsUpdate -AcceptAll
Install-WindowsUpdate -MicrosoftUpdate -IgnoreReboot -AcceptAll
}
}
switch ($windowsCaption)
{
{$_.Contains("Home")} {
$packages += "visualstudio2022community"
$packages += "office365homepremium"
}
{$_.Contains("Business")} {
$packages += "visualstudio2022professional"
$packages += "office365business"
EnableHyperV
}
{$_.Contains("Enterprise")} {
$packages += "visualstudio2022enterprise"
$packages += "office365business"
EnableHyperV
}
Default { $packages += "visualstudio2019community" } # Just in case we will install community but tidy it up later
}
foreach ($feature in $features)
{
Install-Optional-Feature $feature
}
foreach ($package in $chocolateypackages)
{
Install-With-Choco $package
}
Install-Pip
Install-Gemfile
# Run Windows Updates
if($true -eq $windowsUpdate)
{
Install-Windows-Update
}
# A reboot will be called here. Do not put any further code.
Stop-Transcript # Might not happen with reboot