-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMsAutopilotJoin.ps1
339 lines (323 loc) · 12.7 KB
/
MsAutopilotJoin.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
#Requires -RunAsAdministrator
#Script that will auto download and install NuGet provider, PowershellGet module, and Autopilot script from PSGallery. It will then run the script to upload the config to your autopilot instance. You only need to provide valid credentials to join the device when prompted.
Clear-Host
$Error.Clear()
#Elevation check
$ElevationCheck = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if ($ElevationCheck -eq $false) {
Write-Host "Not running as admin or not elevated, exiting...
"
throw
}
#Prereq
# - .NET Framework 4.5
# - Ability to use TLS 1.2
#Variables
$Tenant = 'example.onmicrosoft.com'
#Group tag that will show in Autopilot console
$Tag = 'User Driven'
$ProgressPreference = 'SilentlyContinue'
Write-Host -ForegroundColor Green "
===============
Start of script
===============
"
# Check if NuGet package provider and module are installed
function NuPackCheck {
$i = 0
$MinVer = [Version]::new(2,8,5,201)
do {
Write-Host "NuGet Package Provider: Checking if installed...
"
$NuPackCheck = Get-PackageProvider | Where-Object {$_.Name -eq 'nuget'}
if ($Null -eq $NuPackCheck) {
Write-Host "NuGet Package Provider: Not found, installing...
"
Install-PackageProvider -Name NuGet -Force -MinimumVersion $MinVer -Scope AllUsers
} else {
Write-Host "NuGet Package Provider: Found, continuing...
"
}
$NuPackCheck = Get-PackageProvider | Where-Object {$_.Name -eq 'nuget'}
$NuPackCheck = $Null -eq $NuPackCheck
$i++
} until (($NuPackCheck -eq $false) -or ($i -gt 2))
$NuPackCheck
}
#Check for NuGet module
function NuModuleCheck {
$i = 0
$MinVer = [Version]::new(1,3,3)
do {
Write-Host "NuGet Module: Checking if installed...
"
$NuModuleCheck = Get-Module -ListAvailable | Where-Object {$_.Name -eq 'NuGet'}
if ($Null -eq $NuModuleCheck) {
Write-Host "NuGet Module: Not found, installing...
"
Install-Module -Name 'NuGet' -AllowClobber -Force -Scope AllUsers -MinimumVersion $MinVer -Confirm:$false
} else {
Write-Host "NuGet Module: Found, continuing...
"
}
Write-Host "NuGet Module: Checking if up to date...
"
if ($NuModuleCheck.Version -lt $MinVer) {
Write-Host "NuGet Module: Not up to date, updating...
"
Update-Module -Name 'NuGet' -Force -Confirm:$false
} else {
Write-Host "NuGet Module: Up to date, continuing...
"
}
$NuModuleCheck = Get-Module -ListAvailable | Where-Object {$_.Name -eq 'NuGet'}
$NuModuleCheck = $Null -eq $NuModuleCheck
$i++
} until (($NuModuleCheck -eq $false) -or ($i -gt 2))
$NuModuleCheck
}
#Get original PSGallery trust level
function OriginalPSGal {
Write-Host "PSGallery: Checking and storing current trust level...
"
$OriginalPSGalTrust = (Get-PSRepository | Where-Object -Property 'Name' -eq "PSGallery").InstallationPolicy
$OriginalPSGalTrust
}
#Set new PSGallery trust level
function NewPSGalTrust {
if ($OriginalPSGalTrust -ne 'Trusted') {
Write-Host 'PSGallery: Setting repository to "Trusted"...
'
Set-PSRepository -Name 'PSGallery' -InstallationPolicy 'Trusted'
} else {
Write-Host 'PSGallery: Repository already set to "Trusted", continuing...
'
}
$NewPSGalTrust = (Get-PSRepository | Where-Object -Property 'Name' -eq "PSGallery").InstallationPolicy
$NewPSGalTrust = $Null -eq $NewPSGalTrust
$NewPSGalTrust
}
#Check for PowerShellGet module. Install if missing. Update if less than version 2.2.5
function PSGetCheck {
$i = 0
$MinVer = [Version]::new(2,2,5)
do {
Write-Host "PowerShellGet Module: Checking if installed...
"
$PSGetCheck = Get-Module -All -ListAvailable | Where-Object -Property 'Name' -eq 'PowerShellGet'
if ($Null -eq $PSGetCheck) {
Write-Host "PowerShellGet Module: Not installed, installing...
"
Install-Module -Name PowerShellGet -MinimumVersion $MinVer -AllowClobber -Force -Scope AllUsers -Confirm:$false
} else {
Write-Host "PowerShellGet Module: Installed, continuing...
"
}
Write-Host "PowerShellGet Module: Checking if up to date...
"
if ((($PSGetCheck.Version -ge $MinVer).count -le 0) -and ($Null -ne $PSGetCheck)) {
Write-Host "PowerShellGet Module: Not up to date, updating...
"
Install-Module -Name PowerShellGet -MinimumVersion $MinVer -AllowClobber -Force -Scope AllUsers -Confirm:$false
Update-Module -Name 'PowerShellGet' -Force -Confirm:$false
} else {
Write-Host "PowerShellGet Module: Up to date, continuing...
"
}
$PSGetCheck = Get-Module -All -ListAvailable | Where-Object {($_.Name -eq 'PowerShellGet') -and ($_.Version -ge $MinVer)}
$PSGetCheck = $Null -eq $PSGetCheck
$i++
} until (($PSGetCheck -eq $false) -or ($i -gt 2))
$PSGetCheck
}
#Check for Upload-WindowsAutopilotDeviceInfo module. Install if missing. Update if less than version 1.2.1.0
function APCheck {
$ArchCheck = Test-Path $env:ProgramW6432
if ($ArchCheck -eq $true) {
Write-Host "Autopilot Script: Detected as 64 bit, continuing...
"
} else {
Write-Host "Autopilot Script: Detected as 32 bit, continuing...
"
}
$i = 0
$MinVer = [Version]::new(1,2,1,0)
do {
Write-Host "Autopilot Script: Checking if installed...
"
if (($ArchCheck -eq $true) -and (!(Test-Path "$env:ProgramW6432\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"))) {
Write-Host "Autopilot Script: Not found, installing...
"
Install-Script -Name 'Upload-WindowsAutopilotDeviceInfo' -Force -Scope AllUsers -MinimumVersion $MinVer -Confirm:$false
$APCheck = Test-Path "$env:ProgramW6432\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"
} #elseif (($ArchCheck -eq $true) -and (Test-Path "$env:ProgramW6432\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1")) {
# Write-Host "Autopilot Script: Script is installed, updating...
# "
# Update-Script -Name 'Upload-WindowsAutopilotDeviceInfo' -Force -RequiredVersion $MinVer -Confirm:$false
# $APCheck = Test-Path "$env:ProgramW6432\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"
#}
elseif (($ArchCheck -eq $false) -and (!(Test-Path "${env:ProgramFiles(x86)}\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"))) {
Write-Host "Autopilot Script: Not found, installing...
"
Install-Script -Name 'Upload-WindowsAutopilotDeviceInfo' -Force -Scope AllUsers -MinimumVersion $MinVer -Confirm:$false
$APCheck = Test-Path "${env:ProgramFiles(x86)}\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"
} #elseif (($ArchCheck -eq $false) -and (Test-Path "${env:ProgramFiles(x86)}\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1")) {
# Write-Host "Autopilot Script: Script is installed, updating...
# "
# Update-Script -Name 'Upload-WindowsAutopilotDeviceInfo' -Force -RequiredVersion $MinVer -Confirm:$false
# $APCheck = Test-Path "${env:ProgramFiles(x86)}\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"
#}
else {
$APCheck = $true
Write-Host "Autopilot Script: Found, continuing...
"
}
$i++
} until (($APCheck -eq $true) -or ($i -gt 2))
$APCheck
}
#Get original Execution Policy
function OriginalExecPolicy {
Write-Host 'Execution Policy: Checking and storing current execution policy...
'
$OriginalExecPolicy = Get-ExecutionPolicy -Scope 'LocalMachine'
$OriginalExecPolicy
}
#Set new Execution Policy
function NewExecPolicy {
if ($OrigninalExecPolicy -ne 'Unrestricted') {
Write-Host 'Execution Policy: Setting policy to "Unrestricted"...
'
Set-ExecutionPolicy -ExecutionPolicy 'Unrestricted' -Force -Scope 'LocalMachine'
$NewExecPolicy = Get-ExecutionPolicy -Scope 'LocalMachine'
} else {
Write-Host 'Execution Policy: Policy already set to "Unrestricted", continuing...
'
$NewExecPolicy = 'Unrestricted'
}
$NewExecPolicy
}
#Run Autopilot info upload
function APUpload {
Write-Host "Autopilot Script: Running...
"
$ArchCheck = Test-Path $env:ProgramW6432
if ($ArchCheck -eq $true) {
$Script = "$env:ProgramW6432\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"
} else {
$Script = "${env:ProgramFiles(x86)}\WindowsPowerShell\Scripts\Upload-WindowsAutopilotDeviceInfo.ps1"
}
try {
$APUpload = Invoke-Command -ScriptBlock {
param (
$Script,
$Tenant,
$Tag
)
& $Script -TenantID $Tenant -Grouptag $Tag -ErrorAction 'Continue'
} -ArgumentList $Script, $Tenant, $Tag, 'Continue' -ErrorAction 'Continue'
$APUpload
} catch {
"Autopilot Script: Error running script, reverting to original settings...
"
}
}
#Set PSGallery trust back to original setting
function PSGalleryReset {
Write-Host "PSGallery: Resetting back to original trust level...
"
if ((Get-PSRepository | where-Object -Property Name -eq "PSGallery" | Select-Object -Property InstallationPolicy).InstallationPolicy -ne $OriginalPSGalTrust) {
Set-PSRepository -Name 'PSGallery' -InstallationPolicy $OriginalPSGalTrust
} else {
Write-Host "PSGallery: Setting already matches, continuing...
"
}
}
#Set Execution Policy back to original setting
function ExecPolicyReset {
Write-Host "Execution Policy: Resetting back to original policy...
"
if ($NewExecPolicy -ne $OrigninalExecPolicy) {
Set-ExecutionPolicy -ExecutionPolicy $OrigninalExecPolicy -Scope LocalMachine -Force
} else {
Write-Host "Execution Policy: Setting already matches, continuing...
"
}
}
#Run functions
try {
$OrigninalExecPolicy = OriginalExecPolicy
$OriginalPSGalTrust = OriginalPSGal
$NuPackCheck = NuPackCheck
if ($NuPackCheck -eq $true) {
Write-Host "NuGet Package Provider: Error installing, reverting to original settings..."
PSGalleryReset
ExecPolicyReset
throw
}
$NewPSGalTrust = NewPSGalTrust
if ($NewPSGalTrust -eq 'Error') {
Write-Host "PSGallery: Setting trust failed, reverting to original settings..."
PSGalleryReset
ExecPolicyReset
throw
}
$NewExecPolicy = NewExecPolicy
if ($NewExecPolicy -eq 'Error') {
Write-Host "Execution Policy: Setting trust failed, reverting to original settings..."
PSGalleryReset
ExecPolicyReset
throw
}
$NuModuleCheck = NuModuleCheck
if ($NuModuleCheck -eq $true) {
Write-Host "NuGet Module: Error installing, reverting to original settings..."
PSGalleryReset
ExecPolicyReset
throw
}
$PSGetCheck = PSGetCheck
if ($PSGetCheck -eq $true) {
Write-Host "PowerShellGet Module: Install or update failed, reverting to original settings...
"
PSGalleryReset
ExecPolicyReset
} else {
$APCheck = APCheck
if (($APCheck -eq $false) -or ($null -eq $APCheck)) {
Write-Host -ForegroundColor Red "Autopilot Script: Error installing script, reverting to original settings...
"
PSGalleryReset
ExecPolicyReset
} else {
try {
$APUpload = APUpload
Write-Host ""
} catch {
Write-Host -ForegroundColor Red "Autopilot Script: Error running script, reverting to original settings...
"
PSGalleryReset
ExecPolicyReset
}
}
}
} catch {
Write-Host -ForegroundColor Red "An error occured somewhere...
"
Write-Host -ForegroundColor Red "Attempting to revert back to original settings...
"
if ($Null -ne $OriginalPSGalTrust) {
PSGalleryReset
} else {
Write-Host -ForegroundColor Red "Unable to restore original trust setting...
"
}
if ($Null -ne $OrigninalExecPolicy) {
ExecPolicyReset
} else {
Write-Host -ForegroundColor Red "Unable to restore original execution policy..."
}
}
Write-Host -ForegroundColor Green "=============
End of script
============="