В Windows Server 2012R2/2016/2019 вы можете устанавливать и удалять различные роли и компоненты сервера через графический Server Manager. Однако в большинстве случаев эти же самые операции можно выполнить гораздо быстрее из консоли PowerShell. В этой статье мы рассмотрим особенности управления ролями и компонентами в актуальных версиях Windows Server.
Как вывести все установленные роли и компоненты Windows Server?
Чтобы вывести список всех доступных ролей и компонентов Windows Server используется командлет
Get-WindowsFeature
. Если выполнить его без параметров, появится информация обо всех компонентах.
Как вы видите, отображается название компонента (Display Name), его системное имя (Name) и состояние (Install State: Installed, Available или Removed). Список ролей и компонентов представляет собой дерево со вложенными ролями, которое напоминает то, которые вы видите при установке ролей через графический Server Manager. Для установки и удаления ролей и компонентов через PowerShell, вам нужно знать их системное имя, которое содержится в столбце Name.
Роли и компоненты удаляются из образа так:
Uninstall-WindowsFeature –Name DHCP –Remove
Чтобы установить удаленную роль, воспользуйтесь командлетом:
Install-WindowsFeature DHCP
(понадобится доступ в Интернет)
Либо вы можете восстановить компоненты их дистрибутива с вашей версией Windows Server. Данная команда установит роль DHCP сервера.
Install-WindowsFeature DHCP -Source E:\sources\sxs
Вы можете вывести список установленных компонентов сервера:
Get-WindowsFeature | Where-Object {$_. installstate -eq "installed"} | ft Name,Installstate
Судя по скриншоту, данный сервер используется как файловый сервер (роли FileAndStorage-Services, Storage-Services). Большинство оставшихся компонентов используются для управления и мониторинга сервера.
Если вы не знаете точно имя роли, можно использовать знаки подстановки. Например, чтобы проверить какие из web компонентов роли IIS установлены, выполните (немного сократим синтаксис):
Get-WindowsFeature -Name web-* | Where installed
Вы можете получить список установленных компонентов на удаленном Windows Server:
Get-WindowsFeature -ComputerName msk-prnt1 | Where installed | ft Name,Installstate
Судя по установленным ролям Print-Services и Print-Server, этот сервер используется в качестве сервера печати.
Вы можете использовать командлет Get-WindowsFeature для поиска серверов в домене, на которых установлена определенная роль. Вы можете искать на серверах в определенном OU Active Directory с помощью командлета Get-ADComputer из модуля ActiveDirectory for PowerShell, или по указанному списку серверов (
$servers = ('server1', 'server2')
). Например, нам нужно найти все файловые сервера c ролью FileAndStorage-Services в указанном контейнере AD (я использую редактор PS — Visual Studio Code)
import-module activedirectory
$Servers=get-adcomputer -properties * -Filter {Operatingsystem -notlike "*2008*" -and enabled -eq "true" -and Operatingsystem -like "*Windows Server*"} -SearchBase ‘OU=Servers,OU=MSK,DC=winitpro.ru,DC=ru’ |select name
Foreach ($server in $Servers)
{
Get-WindowsFeature -name FileAndStorage-Services -ComputerName $server.Name | Where installed | ft $server.name, Name, Installstate
}
В результате у нас появился список серверов, на которых установлена данная роль.
Установка ролей и компонентов Windows Server из PowerShell
Для установки ролей и компонентов в Windows Server используется командлет Install-WindowsFeature.
Чтобы установить роль DNS на текущем сервере и инструменты управления (в том числе модуль Powershell – DNSServer), выполните:
Install-WindowsFeature DNS -IncludeManagementTools
По-умолчанию командлет устаналивает все необходимые зависимые роли и компоненты при установке роли. Чтобы вывести список зависимостей до установки воспользуйтесь параметров.
Install-WindowsFeature -name UpdateServices -whatif
Например, для установки роли сервера обновлений WSUS, необходимо установить некоторые компоненты IIS.
What if: Continue with installation?
What if: Performing installation for "[Windows Server Update Services] Windows Server Update
What if: Performing installation for "[Windows Server Update Services] WID Database".
What if: Performing installation for "[Windows Server Update Services] WSUS Services".
What if: Performing installation for "[Web Server (IIS)] Windows Authentication".
What if: Performing installation for "[Web Server (IIS)] Dynamic Content Compression".
What if: Performing installation for "[Web Server (IIS)] Performance".
What if: Performing installation for "[Web Server (IIS)] Static Content".
What if: Performing installation for "[Windows Internal Database] Windows Internal Database".
What if: The target server may need to be restarted after the installation completes.
Чтобы установить роль Remote Desktop Session Host, службу лицензирования RDS и утилиты управления RDS на удаленном сервере, воспользуйтесь командой:
Install-WindowsFeature -ComputerName msk-rds21 RDS-RD-Server, RDS-Licensing –IncludeAllSubFeature –IncludeManagementTools –Restart
C параметром
–Restart
сервер будет автоматически перезагружен, если установленный компонент это потребует.
Также можно установить компонент такой командой (например роль SMTP сервера):
Get-WindowsFeature -Name SMTP-Server | Install-WindowsFeature
Деплой ролей на множество серверов Windows Server
Еще одна интересная возможность при развертывании однотипных серверов. Вы можете установить необходимые компоненты на эталонном Windows Server и экспортируете список установленных ролей в CSV файл:
Get-WindowsFeature | where{$_.Installed -eq $True} | select name | Export-Csv C:\ps\Roles.csv -NoTypeInformation –Verbose
Потом вы можете использовать этот CSV файл для установки такого же набора ролей на других типовых серверах:
Import-Csv C:\PS\Roles.csv | foreach{ Install-WindowsFeature $_.name }
Если роль или компонент уже установлен, команда вернет
NoChangeNeeded
и продолжит установку следующей роли.
Либо для установки одинакового набора ролей сразу на нескольких серверах можно использовать такую команду:
$servers = ('srv1', 'srv2',’srv3’)
foreach ($server in $servers) {Install-WindowsFeature RDS-RD-Server -ComputerName $server}
Как удалить роль или компонент в Windows Server с помощью PowerShell?
Для удаления ролей и компонентов Windows Server используется командлет
Remove-WindowsFeature
.
Например, чтобы удалить роль принт-сервера, выполните команду:
Remove-WindowsFeature Print-Server -Restart