Ранее я уже публиковал инструкцию по превращению серверной ОС в ОС для рабочей станции. Но этот процесс можно автоматизировать при помощи #PowerShell.
В статье Windows Server 2022 для рабочей станции рассматривалось ручная адаптация Windows Server 2022 под рабочую станцию. Я решил написать специальный скрипт, который берёт на себя часть действий. Но окончательная настройка, например, такая как редактирование #GPO остаётся за пользователем.
Рассмотрим скрипт по адаптации серверной ОС под рабочую станцию.
Скрипт требует административных прав доступа, поэтому его необходимо запускать под аккаунтом администратора.
- Включение дополнительных компонентов #Windows.
- Настройка необходимых для рабочей станции служб.
- Отключение IE Enhanced Security Configuration для аккаунтов администраторов и пользователей.
- Переключение приоритета процессора в сторону приложений.
- Настройка MMAgent.
- Переключение DEP только на программы #Windows и службы.
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
| <#PSScriptInfo
.VERSION 0.1.0
.GUID c050355b-ecbd-4b13-b805-3a422dc0c995
.AUTHOR Kai Kimera
.AUTHOREMAIL mail@kai.kim
.COMPANYNAME Library Online
.COPYRIGHT 2023 Library Online. All rights reserved.
.LICENSEURI https://choosealicense.com/licenses/mit/
.PROJECTURI https://lib.onl/ru/2023/10/fb64d665-3e56-5fa5-a9eb-2e2e251949d8/
#>
#Requires -Version 7.2
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Windows Server configuration script.
.DESCRIPTION
The script allows you to set up Windows Server as a workstation.
.EXAMPLE
.\pwsh.win.srv.ws.ps1
.LINK
https://lib.onl/ru/2023/10/fb64d665-3e56-5fa5-a9eb-2e2e251949d8/
#>
# -------------------------------------------------------------------------------------------------------------------- #
# INITIALIZATION
# -------------------------------------------------------------------------------------------------------------------- #
function Start-Script() {
Start-FeatureConfig
Start-ServiceConfig
Start-IEConfig
Start-PriorityControlConfig
Start-MMAgentConfig
Start-DEPConfig
}
# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURING FEATURES
# -------------------------------------------------------------------------------------------------------------------- #
function Start-FeatureConfig {
$Param = @{
Name = 'Wireless-Networking'
}
Install-WindowsFeature @Param
}
# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURING SERVICES
# -------------------------------------------------------------------------------------------------------------------- #
function Start-ServiceConfig() {
$Name = @('Audiosrv', 'AudioEndpointBuilder')
$Name | ForEach-Object {
$Param = @{
Name = "${_}"
StartupType = 'Automatic'
}
Set-Service @Param
}
$WSearch = @{
Name = 'WSearch'
StartupType = 'AutomaticDelayedStart'
}
Set-Service @WSearch
}
# -------------------------------------------------------------------------------------------------------------------- #
# DISABLE IE ENHANCED SECURITY CONFIGURATION (ESC)
# -------------------------------------------------------------------------------------------------------------------- #
function Start-IEConfig() {
$Path = @(
'HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}'
'HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}'
)
$Path | ForEach-Object {
$Param = @{
LiteralPath = "${_}"
Name = 'IsInstalled'
Value = 0
}
if (Test-Path -LiteralPath "${_}") {
Set-ItemProperty @Param
Write-Host 'IE Enhanced Security Configuration (ESC) has been disabled.'
} else {
Write-Error -Message "'${_}' not found!" -ErrorAction 'Stop'
}
}
}
# -------------------------------------------------------------------------------------------------------------------- #
# ADJUST PROCESSOR RESOURCES FOR BEST PERFORMANCE OF PROGRAMS
# -------------------------------------------------------------------------------------------------------------------- #
function Start-PriorityControlConfig() {
$Path = 'HKLM:\SYSTEM\CurrentControlSet\Control\PriorityControl'
$Param = @{
LiteralPath = "${Path}"
Name = 'Win32PrioritySeparation'
Value = 38
}
if (Test-Path -LiteralPath "${Path}") {
Set-ItemProperty @Param
} else {
Write-Error -Message "'${Path}' not found!" -ErrorAction 'Stop'
}
}
# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURING MMAGENT
# -------------------------------------------------------------------------------------------------------------------- #
function Start-MMAgentConfig() {
$Param = @{
MemoryCompression = $true
OperationAPI = $true
PageCombining = $true
}
Enable-MMAgent @Param
}
# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURING DEP
# -------------------------------------------------------------------------------------------------------------------- #
function Start-DEPConfig() {
cmd.exe /c 'bcdedit.exe /set {current} nx OptIn'
}
# -------------------------------------------------------------------------------------------------------------------- #
# -------------------------------------------------< RUNNING SCRIPT >------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #
Start-Script
|