Автоматическая настройка Windows Server 2022 под рабочую станцию

Автоматическая настройка Windows Server 2022 под рабочую станцию

Ранее я уже публиковал инструкцию по превращению серверной ОС в ОС для рабочей станции. Но этот процесс можно автоматизировать при помощи #PowerShell.

В статье Windows Server 2022 для рабочей станции рассматривалось ручная адаптация Windows Server 2022 под рабочую станцию. Я решил написать специальный скрипт, который берёт на себя часть действий. Но окончательная настройка, например, такая как редактирование #GPO остаётся за пользователем.

Автоматизация

Рассмотрим скрипт по адаптации серверной ОС под рабочую станцию.

Примеры

Скрипт требует административных прав доступа, поэтому его необходимо запускать под аккаунтом администратора.

Терминал
1
.\pwsh.win.srv.ws.ps1

Алгоритм работы

  • Включение дополнительных компонентов #Windows.
  • Настройка необходимых для рабочей станции служб.
  • Отключение IE Enhanced Security Configuration для аккаунтов администраторов и пользователей.
  • Переключение приоритета процессора в сторону приложений.
  • Настройка MMAgent.
  • Переключение DEP только на программы #Windows и службы.

Скрипт

pwsh.win.srv.ws.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
<#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/articles/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/articles/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