vagrant-uplift 0.2.1902.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/bin/console +13 -0
  3. data/bin/setup +8 -0
  4. data/lib/scripts/vagrant/uplift.vagrant.core/uplift.fix-second-network.ps1 +59 -0
  5. data/lib/scripts/vagrant/uplift.vagrant.dc12/dc.dsc.ps1 +128 -0
  6. data/lib/scripts/vagrant/uplift.vagrant.dc12/dc.replica.dsc.ps1 +117 -0
  7. data/lib/scripts/vagrant/uplift.vagrant.dc12/dc.users.dsc.ps1 +147 -0
  8. data/lib/scripts/vagrant/uplift.vagrant.dc12/tests/dc.dsc.Tests.ps1 +165 -0
  9. data/lib/scripts/vagrant/uplift.vagrant.dcjoin/dc.join.dsc.ps1 +125 -0
  10. data/lib/scripts/vagrant/uplift.vagrant.dcjoin/dc.join.hostname.ps1 +13 -0
  11. data/lib/scripts/vagrant/uplift.vagrant.dcjoin/tests/dc.join.dsc.Tests.ps1 +12 -0
  12. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/shared/sp.helpers.ps1 +155 -0
  13. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2013.dsc.ps1 +248 -0
  14. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2013.post_setup.dsc.ps1 +117 -0
  15. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2016.dsc.ps1 +246 -0
  16. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2016.farm-only.dsc.ps1 +281 -0
  17. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2016.info.ps1 +36 -0
  18. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2016.post_setup.dsc.ps1 +125 -0
  19. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2016.pre_setup1.dsc.ps1 +28 -0
  20. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/sp2016.pre_setup2.dsc.ps1 +75 -0
  21. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/tests/sp2013.dsc.wfe.Tests.ps1 +68 -0
  22. data/lib/scripts/vagrant/uplift.vagrant.sharepoint/tests/sp2016.dsc.wfe.Tests.ps1 +68 -0
  23. data/lib/scripts/vagrant/uplift.vagrant.sql12/sql.complete.dsc.ps1 +186 -0
  24. data/lib/scripts/vagrant/uplift.vagrant.sql12/sql.dsc.ps1 +66 -0
  25. data/lib/scripts/vagrant/uplift.vagrant.sql12/sql.optimize.dsc.ps1 +50 -0
  26. data/lib/scripts/vagrant/uplift.vagrant.sql12/sql.prepare.dsc.ps1 +60 -0
  27. data/lib/scripts/vagrant/uplift.vagrant.sql12/tests/sql.dsc.Tests.ps1 +23 -0
  28. data/lib/scripts/vagrant/uplift.vagrant.sql12/tests/sql12.dsc.Tests.ps1 +45 -0
  29. data/lib/scripts/vagrant/uplift.vagrant.sql12/tests/sql16.dsc.Tests.ps1 +22 -0
  30. data/lib/scripts/vagrant/uplift.vagrant.visual_studio13/tests/vs13.dsc.Tests.ps1 +61 -0
  31. data/lib/scripts/vagrant/uplift.vagrant.visual_studio13/vs13.dsc.post_deploy.ps1 +32 -0
  32. data/lib/scripts/vagrant/uplift.vagrant.visual_studio13/vs13.dsc.ps1 +69 -0
  33. data/lib/scripts/vagrant/uplift.vagrant.visual_studio17/tests/vs17.dsc.Tests.ps1 +61 -0
  34. data/lib/scripts/vagrant/uplift.vagrant.visual_studio17/vs17.dsc.post_deploy.ps1 +34 -0
  35. data/lib/scripts/vagrant/uplift.vagrant.visual_studio17/vs17.dsc.ps1 +134 -0
  36. data/lib/scripts/vagrant/uplift.vagrant.win12soe/soe.dsc.ps1 +115 -0
  37. data/lib/scripts/vagrant/uplift.vagrant.win12soe/soe.shortcuts.dsc.ps1 +41 -0
  38. data/lib/scripts/vagrant/uplift.vagrant.win12soe/tests/soe.dsc.modules.Tests.ps1 +71 -0
  39. data/lib/scripts/vagrant/uplift.vagrant.win12soe/tests/soe.dsc.os.Tests.ps1 +89 -0
  40. data/lib/vagrant-uplift.rb +8 -0
  41. data/lib/vagrant-uplift/config_builder.rb +819 -0
  42. data/lib/vagrant-uplift/log.rb +146 -0
  43. data/lib/vagrant-uplift/plugin-vagrant-uplift-checkpoint.rb +41 -0
  44. data/lib/vagrant-uplift/plugin.rb +16 -0
  45. data/lib/vagrant-uplift/version.rb +10 -0
  46. metadata +131 -0
@@ -0,0 +1,281 @@
1
+ # fail on errors and include uplift helpers
2
+ $ErrorActionPreference = "Stop"
3
+
4
+ Import-Module Uplift.Core
5
+
6
+ # include shared helpers from uplift.vagrant.sharepoint handler
7
+ . "c:/windows/temp/uplift.vagrant.sharepoint/shared/sp.helpers.ps1"
8
+
9
+ Write-UpliftMessage "Creating new SharePoint farm..."
10
+ Write-UpliftEnv
11
+
12
+ $spSqlServerName = Get-UpliftEnvVariable "UPLF_SP_FARM_SQL_SERVER_HOST_NAME"
13
+ $spSqlDbPrefix = Get-UpliftEnvVariable "UPLF_SP_FARM_SQL_DB_PREFIX"
14
+
15
+ $spPassPhrase = Get-UpliftEnvVariable "UPLF_SP_FARM_PASSPHRASE"
16
+
17
+ $spSetupUserName = Get-UpliftEnvVariable "UPLF_SP_SETUP_USER_NAME"
18
+ $spSetupUserPassword = Get-UpliftEnvVariable "UPLF_SP_SETUP_USER_PASSWORD"
19
+
20
+ function Get-SharePointLocalFarm() {
21
+
22
+ $result = $null
23
+
24
+ try {
25
+
26
+ if ($null -eq (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue))
27
+ {
28
+ Add-PSSnapin Microsoft.SharePoint.PowerShell
29
+ }
30
+
31
+ $result = Get-SPFarm -ErrorAction SilentlyContinue
32
+ Write-UpliftMessage "Local farm: $result"
33
+
34
+ } catch {
35
+ Write-UpliftMessage "Error while detecting local SharePoint install"
36
+ Write-UpliftMessage $_
37
+
38
+ $result = $null
39
+ }
40
+
41
+ return $result
42
+ }
43
+
44
+ Write-UpliftMessage "Detecting existing SharePoint farm install..."
45
+ $hasFarm = ($null -ne (Get-SharePointLocalFarm))
46
+
47
+ Write-UpliftMessage " - hasFarm: $hasFarm"
48
+
49
+ if($hasFarm -eq $False) {
50
+ Write-UpliftMessage "No existing farm found, cleaning up SQL server dbs: $spSqlServerName $spSqlDbPrefix"
51
+ # prepare SQL server for SharePoint deployment
52
+ Initialize-UpSPSqlServer $spSqlServerName $spSqlDbPrefix
53
+
54
+ } else {
55
+ Write-UpliftMessage "Detected local SharePoint farm. No SQL server clean up is needed"
56
+ }
57
+
58
+ # deploy SharePoint
59
+ Configuration Install_SharePointFarm
60
+ {
61
+ Import-DscResource -ModuleName PSDesiredStateConfiguration
62
+ Import-DscResource -ModuleName SharePointDsc
63
+
64
+ Node localhost {
65
+
66
+ $setupUserName = $Node.SetupUserName
67
+ $setupUserPassword = $Node.SetupUserPassword
68
+ $spPassPhrase = $Node.PassPhrase
69
+
70
+ $secureSetupUserPassword = ConvertTo-SecureString $setupUserPassword -AsPlainText -Force
71
+ $setupUserCreds = New-Object System.Management.Automation.PSCredential($setupUserName, $secureSetupUserPassword)
72
+
73
+ $securePassPhrase = ConvertTo-SecureString $spPassPhrase -AsPlainText -Force
74
+ $passPhraseCreds = New-Object System.Management.Automation.PSCredential($setupUserName, $securePassPhrase)
75
+
76
+ $SPSetupAccount = $setupUserCreds
77
+ $SPFarmAccount = $setupUserCreds
78
+
79
+ $SPServicePoolManagedAccount = $setupUserCreds
80
+ $SPWebPoolManagedAccount = $setupUserCreds
81
+
82
+ $SPServiceAppPoolName = "SharePoint Service Applications"
83
+
84
+ LocalConfigurationManager
85
+ {
86
+ RebootNodeIfNeeded = $false
87
+ }
88
+
89
+ # ensuring that required services are up before running SharePoint farm creation
90
+ # that allows to fail eraly in case of spoiled images
91
+ Service W3SVC
92
+ {
93
+ Name = "W3SVC"
94
+ StartupType = "Automatic"
95
+ State = "Running"
96
+ }
97
+
98
+ Service IISADMIN
99
+ {
100
+ DependsOn = "[Service]W3SVC"
101
+
102
+ Name = "IISADMIN"
103
+ StartupType = "Automatic"
104
+ State = "Running"
105
+ }
106
+
107
+ # initial farm creation
108
+ SPFarm CreateSPFarm
109
+ {
110
+ DependsOn = "[Service]IISADMIN"
111
+
112
+ Ensure = "Present"
113
+ ServerRole = "SingleServerFarm"
114
+ DatabaseServer = $spSqlServerName
115
+ FarmConfigDatabaseName = ($spSqlDbPrefix + "_Config")
116
+ Passphrase = $passPhraseCreds
117
+ FarmAccount = $SPFarmAccount
118
+ PsDscRunAsCredential = $SPSetupAccount
119
+ AdminContentDatabaseName = ($spSqlDbPrefix + "_AdminContent")
120
+ RunCentralAdmin = $true
121
+ #DependsOn = "[SPInstall]InstallSharePoint"
122
+ }
123
+
124
+ # accounts
125
+ SPManagedAccount ServicePoolManagedAccount
126
+ {
127
+ AccountName = $SPServicePoolManagedAccount.UserName
128
+ Account = $SPServicePoolManagedAccount
129
+ PsDscRunAsCredential = $SPSetupAccount
130
+ DependsOn = "[SPFarm]CreateSPFarm"
131
+ }
132
+ SPManagedAccount WebPoolManagedAccount
133
+ {
134
+ AccountName = $SPWebPoolManagedAccount.UserName
135
+ Account = $SPWebPoolManagedAccount
136
+ PsDscRunAsCredential = $SPSetupAccount
137
+ DependsOn = "[SPFarm]CreateSPFarm"
138
+ }
139
+
140
+ # default apps
141
+ SPUsageApplication UsageApplication
142
+ {
143
+ Name = "Usage Service Application"
144
+ DatabaseName = ($spSqlDbPrefix + "_SP_Usage" )
145
+ UsageLogCutTime = 5
146
+ UsageLogLocation = "C:\UsageLogs"
147
+ UsageLogMaxFileSizeKB = 1024
148
+ PsDscRunAsCredential = $SPSetupAccount
149
+ DependsOn = "[SPFarm]CreateSPFarm"
150
+ }
151
+
152
+ SPStateServiceApp StateServiceApp
153
+ {
154
+ Name = "State Service Application"
155
+ DatabaseName = ($spSqlDbPrefix + "_SP_State")
156
+ PsDscRunAsCredential = $SPSetupAccount
157
+ DependsOn = "[SPFarm]CreateSPFarm"
158
+ }
159
+
160
+ SPDistributedCacheService EnableDistributedCache
161
+ {
162
+ Name = "AppFabricCachingService"
163
+ Ensure = "Present"
164
+ CacheSizeInMB = 1024
165
+ ServiceAccount = $SPServicePoolManagedAccount.UserName
166
+ PsDscRunAsCredential = $SPSetupAccount
167
+ CreateFirewallRules = $true
168
+ DependsOn = @('[SPFarm]CreateSPFarm','[SPManagedAccount]ServicePoolManagedAccount')
169
+ }
170
+
171
+ # default services
172
+ SPServiceInstance ClaimsToWindowsTokenServiceInstance
173
+ {
174
+ Name = "Claims to Windows Token Service"
175
+ Ensure = "Present"
176
+ PsDscRunAsCredential = $SPSetupAccount
177
+ DependsOn = "[SPFarm]CreateSPFarm"
178
+ }
179
+
180
+ SPServiceInstance SecureStoreServiceInstance
181
+ {
182
+ Name = "Secure Store Service"
183
+ Ensure = "Present"
184
+ PsDscRunAsCredential = $SPSetupAccount
185
+ DependsOn = "[SPFarm]CreateSPFarm"
186
+ }
187
+
188
+ SPServiceInstance ManagedMetadataServiceInstance
189
+ {
190
+ Name = "Managed Metadata Web Service"
191
+ Ensure = "Present"
192
+ PsDscRunAsCredential = $SPSetupAccount
193
+ DependsOn = "[SPFarm]CreateSPFarm"
194
+ }
195
+
196
+ SPServiceInstance BCSServiceInstance
197
+ {
198
+ Name = "Business Data Connectivity Service"
199
+ Ensure = "Present"
200
+ PsDscRunAsCredential = $SPSetupAccount
201
+ DependsOn = "[SPFarm]CreateSPFarm"
202
+ }
203
+
204
+ SPServiceInstance SearchServiceInstance
205
+ {
206
+ Name = "SharePoint Server Search"
207
+ Ensure = "Present"
208
+ PsDscRunAsCredential = $SPSetupAccount
209
+ DependsOn = "[SPFarm]CreateSPFarm"
210
+ }
211
+
212
+ # # service applications
213
+ # SPServiceAppPool MainServiceAppPool
214
+ # {
215
+ # Name = $SPServiceAppPoolName
216
+ # ServiceAccount = $SPServicePoolManagedAccount.UserName
217
+ # PsDscRunAsCredential = $SPSetupAccount
218
+ # DependsOn = "[SPFarm]CreateSPFarm"
219
+ # }
220
+
221
+ # SPSecureStoreServiceApp SecureStoreServiceApp
222
+ # {
223
+ # Name = "Secure Store Service Application"
224
+ # ApplicationPool = $SPServiceAppPoolName
225
+ # AuditingEnabled = $true
226
+ # AuditlogMaxSize = 30
227
+ # DatabaseName = ($spSqlDbPrefix + "_SP_SecureStore")
228
+ # PsDscRunAsCredential = $SPSetupAccount
229
+ # DependsOn = "[SPServiceAppPool]MainServiceAppPool"
230
+ # }
231
+
232
+ # SPManagedMetaDataServiceApp ManagedMetadataServiceApp
233
+ # {
234
+ # Name = "Managed Metadata Service Application"
235
+ # PsDscRunAsCredential = $SPSetupAccount
236
+ # ApplicationPool = $SPServiceAppPoolName
237
+ # DatabaseName = ($spSqlDbPrefix + "_SP_MMS")
238
+ # DependsOn = "[SPServiceAppPool]MainServiceAppPool"
239
+ # }
240
+
241
+ # SPBCSServiceApp BCSServiceApp
242
+ # {
243
+ # Name = "BCS Service Application"
244
+ # DatabaseServer = $spSqlServerName
245
+ # ApplicationPool = $SPServiceAppPoolName
246
+ # DatabaseName = ($spSqlDbPrefix + "_SP_BCS")
247
+ # PsDscRunAsCredential = $SPSetupAccount
248
+ # DependsOn = @('[SPServiceAppPool]MainServiceAppPool', '[SPSecureStoreServiceApp]SecureStoreServiceApp')
249
+ # }
250
+
251
+ # SPSearchServiceApp SearchServiceApp
252
+ # {
253
+ # Name = "Search Service Application"
254
+ # DatabaseName = ($spSqlDbPrefix + "_SP_Search")
255
+ # ApplicationPool = $SPServiceAppPoolName
256
+ # PsDscRunAsCredential = $SPSetupAccount
257
+ # DependsOn = "[SPServiceAppPool]MainServiceAppPool"
258
+ # }
259
+ }
260
+ }
261
+
262
+ $config = @{
263
+ AllNodes = @(
264
+ @{
265
+ NodeName = 'localhost'
266
+
267
+ PSDscAllowDomainUser = $true
268
+ PSDscAllowPlainTextPassword = $true
269
+
270
+ SetupUserName = $spSetupUserName
271
+ SetupUserPassword = $spSetupUserPassword
272
+
273
+ PassPhrase = $spPassPhrase
274
+ }
275
+ )
276
+ }
277
+
278
+ $configuration = Get-Command Install_SharePointFarm
279
+ Start-UpliftDSCConfiguration $configuration $config
280
+
281
+ exit 0
@@ -0,0 +1,36 @@
1
+ # fail on errors and include uplift helpers
2
+ $ErrorActionPreference = "Stop"
3
+
4
+ function Get-SharePoint2016Edittion($productId) {
5
+
6
+ # https://social.technet.microsoft.com/wiki/contents/articles/40031.sharepoint-2016-detect-the-installed-edition-with-powershell.aspx
7
+
8
+ switch ($productId)
9
+ {
10
+ "5DB351B8-C548-4C3C-BFD1-82308C9A519B" { return "SharePoint 2016 Trail Edition" }
11
+ "4F593424-7178-467A-B612-D02D85C56940" { return "SharePoint 2016 Standard Edition" }
12
+ "716578D2-2029-4FF2-8053-637391A7E683" { return "SharePoint 2016 Enterprise Edition" }
13
+ "435d4d60-f4cf-421d-abc8-129e4b57f7a" { return "n/a" }
14
+ }
15
+
16
+ return $productId
17
+ }
18
+
19
+ Write-Host "Loading SharePoint snapin"
20
+ ASNP Microsoft.SharePoint.Powershell
21
+
22
+ Write-Host "Fetching local farm..."
23
+ $farm = Get-SPFarm
24
+
25
+ Write-Host "Farm version (config db version):"
26
+ $farm.BuildVersion
27
+
28
+ Write-Host "Farm products:"
29
+ $farm.Products | % { Write-Host ($_.Guid + " (" + (Get-SharePoint2016Edittion $_.Guid) + ")") }
30
+
31
+ Write-Host "SharePoint-related products:"
32
+ Get-SPProduct -Local `
33
+ | Sort-Object -Property ProductName `
34
+ | % { Write-Host $_.ProductName }
35
+
36
+ exit 0
@@ -0,0 +1,125 @@
1
+ # fail on errors and include uplift helpers
2
+ $ErrorActionPreference = "Stop"
3
+
4
+ Import-Module Uplift.Core
5
+
6
+ # include shared helpers from uplift.vagrant.sharepoint handler
7
+ . "c:/windows/temp/uplift.vagrant.sharepoint/shared/sp.helpers.ps1"
8
+
9
+ Write-UpliftMessage "Running SharePoint post-setup tuning..."
10
+ Write-UpliftEnv
11
+
12
+ Configuration Install_SharePointFarmTuning
13
+ {
14
+ Import-DscResource -ModuleName PSDesiredStateConfiguration
15
+ Import-DscResource -ModuleName SharePointDsc
16
+ Import-DscResource -ModuleName xWebAdministration
17
+
18
+ Node localhost {
19
+
20
+ LocalConfigurationManager
21
+ {
22
+ RebootNodeIfNeeded = $false
23
+ }
24
+
25
+ Service SharePointAdministration {
26
+ Ensure = "Present"
27
+ Name = "SPAdminV4"
28
+ StartupType = "Automatic"
29
+ State = "Running"
30
+ }
31
+
32
+ Service SharePointSearchHostController {
33
+ Ensure = "Present"
34
+ Name = "SPSearchHostController"
35
+ StartupType = "Automatic"
36
+ State = "Running"
37
+ }
38
+
39
+ Service SharePointServerSearch15 {
40
+ Ensure = "Present"
41
+ Name = "OSearch16"
42
+ StartupType = "Automatic"
43
+ State = "Running"
44
+ }
45
+
46
+ Service SharePointTimerService {
47
+ Ensure = "Present"
48
+ Name = "SPTimerV4"
49
+ StartupType = "Automatic"
50
+ State = "Running"
51
+ }
52
+
53
+ Service SharePointTracingService {
54
+ Ensure = "Present"
55
+ Name = "SPTraceV4"
56
+ StartupType = "Automatic"
57
+ State = "Running"
58
+ }
59
+
60
+ Service SharePointUserCodeHost {
61
+ Ensure = "Present"
62
+ Name = "SPUserCodeV4"
63
+ StartupType = "Automatic"
64
+ State = "Running"
65
+ }
66
+
67
+ xWebsite SharePointCentralAdministrationv4 {
68
+ Ensure = "Present"
69
+ Name="SharePoint Central Administration v4"
70
+ State = "Started"
71
+ }
72
+
73
+ xWebsite SharePointWebServices {
74
+ Ensure = "Present"
75
+ Name="SharePoint Web Services"
76
+ State = "Started"
77
+ }
78
+
79
+ xWebAppPool SecurityTokenServiceApplicationPool {
80
+ Ensure = "Present"
81
+ Name="SecurityTokenServiceApplicationPool"
82
+ State = "Started"
83
+ }
84
+
85
+ xWebAppPool SharePointCentralAdministrationv4AppPool {
86
+ Ensure = "Present"
87
+ Name="SharePoint Central Administration v4"
88
+ State = "Started"
89
+ }
90
+
91
+ xWebAppPool SharePointWebServicesRootAppPool {
92
+ Ensure = "Present"
93
+ Name="SharePoint Web Services Root"
94
+ State = "Started"
95
+ }
96
+ }
97
+ }
98
+
99
+ $config = @{
100
+ AllNodes = @(
101
+ @{
102
+ NodeName = 'localhost'
103
+
104
+ PSDscAllowDomainUser = $true
105
+ PSDscAllowPlainTextPassword = $true
106
+ }
107
+ )
108
+ }
109
+
110
+ # applying updates if any
111
+ $cmd_text = 'psconfig.exe -cmd upgrade -inplace b2b -force -cmd applicationcontent -install -cmd installfeatures'
112
+
113
+ Write-UpliftMessage "Running updates: $cmd_text"
114
+ cd "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\BIN"
115
+ ./psconfig.exe -cmd upgrade -inplace b2b -force -cmd applicationcontent -install -cmd installfeatures
116
+ Confirm-UpliftExitCode $LASTEXITCODE "Cannot execute farm updates: $cmd_text"
117
+
118
+ Write-UpliftMessage "Ensuring IIS services are up"
119
+ Invoke-UpliftIISReset
120
+
121
+ # ensuring other services are up
122
+ $configuration = Get-Command Install_SharePointFarmTuning
123
+ Start-UpliftDSCConfiguration $configuration $config
124
+
125
+ exit 0
@@ -0,0 +1,28 @@
1
+ # fail on errors and include uplift helpers
2
+ $ErrorActionPreference = "Stop"
3
+
4
+ Import-Module Uplift.Core
5
+
6
+ # include shared helpers from uplift.vagrant.sharepoint handler
7
+ . "c:/windows/temp/uplift.vagrant.sharepoint/shared/sp.helpers.ps1"
8
+
9
+ Write-UpliftMessage "Running SharePoint pre-setup1 tuning..."
10
+ Write-UpliftEnv
11
+
12
+ # all this happens due to spoiled IIS installation after sysprep
13
+ # prereq/sp bin get IIS configured, but sysprep kills it
14
+ # we make some patches, and then uninstall IIS, and then run reboot
15
+ # once done, we bring Web-Server feature back and all works well
16
+
17
+ # patch IIS config
18
+ # https://forums.iis.net/t/1160389.aspx
19
+ Write-UpliftMessage "Fixing IIS config after sysprep"
20
+ Write-UpliftMessage " - details: https://forums.iis.net/t/1160389.aspx"
21
+
22
+ Repair-UpliftIISApplicationHostFile
23
+
24
+ # uninstall web server feature
25
+ Write-UpliftMessage "Uninstalling Web-Server feature"
26
+ Uninstall-WindowsFeature Web-Server | Out-Null
27
+
28
+ exit 0