# Управление ролями и функциями Windows Server с помощью PowerShell

## Как через PowerShell вывести список всех установленных ролей и функций Windows Server  


Используйте командлет Get-WindowsFeature, чтобы отобразить список всех доступных ролей и компонентов Windows Server. Если вы запустите его без параметров, вы увидите информацию обо всех компонентах Windows Server.

<div id="bkmrk-1-get-windowsfeature"><div class="syntaxhighlighter  bash" id="bkmrk-1-get-windowsfeature-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Get-WindowsFeature`</div></div></td></tr></tbody></table>

</div></div>[![](https://pwsh.ru/wp-content/uploads/2021/08/Get-WindowsFeature.png)](https://pwsh.ru/wp-content/uploads/2021/08/Get-WindowsFeature.png)

Отображаются имя компонента (**Display Name**), его системное имя (**Name**) и состояние (**Install State**: **Installed**, **Available** или **Removed**). Список ролей и функций выглядит как дерево с вложенными ролями, подобное тому, которое вы видите при установке ролей в графическом интерфейсе Server Manager. Чтобы установить и удалить любые роли или компоненты с помощью PowerShell, вы должны знать их системные имена, указанные в столбце «Имя».

**Подсказка**: Если роль или функция удалены, это означает, что её установочные файлы удалены из системного компонента sote (для уменьшения размера папки WinSxS), и вы не сможете установить роль без доступа в Интернет или установочного ISO диска с Windows Server.

Вы можете удалить роли или компоненты из хранилища следующим образом:

<div id="bkmrk-1-uninstall-windowsf"><div class="syntaxhighlighter  bash" id="bkmrk-1-uninstall-windowsf-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Uninstall-WindowsFeature -Name DHCP -Remove`</div></div></td></tr></tbody></table>

</div></div>Чтобы установить удалённую роль DHCP, используйте этот командлет (вам понадобится прямой доступ в Интернет):

<div id="bkmrk-1-install-windowsfea"><div class="syntaxhighlighter  bash" id="bkmrk-1-install-windowsfea-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Install-WindowsFeature DHCP`</div></div></td></tr></tbody></table>

</div></div>Или вы можете восстановить двоичные файлы компонентов из ISO-образа Windows Server:

<div id="bkmrk-1-install-windowsfea-2"><div class="syntaxhighlighter  bash" id="bkmrk-1-install-windowsfea-3"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Install-WindowsFeature DHCP -Source E:\sources\sxs`</div></div></td></tr></tbody></table>

</div></div>Вы можете перечислить установленные функции сервера:

<div id="bkmrk-1-get-windowsfeature-2"><div class="syntaxhighlighter  bash" id="bkmrk-1-get-windowsfeature-3"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Get-WindowsFeature | Where-Object {$_. installstate -``eq` `"installed"``} | ft Name,Installstate`</div></div></td></tr></tbody></table>

</div></div>Судя по приведённому ниже снимку экрана, этот сервер используется в качестве контроллера домена (установлена роль **AD-Domain-Services**), DNS сервера (установлена роль **DNS**) и файлового сервера (установлены роли **FileAndStorage-Services**, **Storage-Services**). Большинство других компонентов используются для управления или мониторинга сервера.

<div class="37a7539ad6517bcd4d41713f8410c62f" data-index="4" id="bkmrk--1">---

</div>[![](https://pwsh.ru/wp-content/uploads/2021/08/Get-WindowsFeature_Where-Object.png)](https://pwsh.ru/wp-content/uploads/2021/08/Get-WindowsFeature_Where-Object.png)

Если вы точно не знаете имя роли, вы можете использовать подстановочные знаки. Например, чтобы проверить, какие веб-компоненты роли IIS установлены, выполните эту команду (синтаксис немного сокращён):

<div id="bkmrk-1-get-windowsfeature-4"><div class="syntaxhighlighter  bash" id="bkmrk-1-get-windowsfeature-5"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Get-WindowsFeature -Name web-* | Where installed`</div></div></td></tr></tbody></table>

</div></div>[![](https://pwsh.ru/wp-content/uploads/2021/08/get-windowsfeature-name-like-web.png)](https://pwsh.ru/wp-content/uploads/2021/08/get-windowsfeature-name-like-web.png)

Вы можете получить список установленных компонентов на удалённом сервере Windows:

<div id="bkmrk-1-get-windowsfeature-6"><div class="syntaxhighlighter  bash" id="bkmrk-1-get-windowsfeature-7"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Get-WindowsFeature -ComputerName ИМЯ_КОМПЬЮТЕРА | Where installed | ft Name,Installstate`</div></div></td></tr></tbody></table>

</div></div>Вы можете использовать командлет **Get-WindowsFeature** для поиска серверов в вашем домене, на которых установлена определённая роль. Вы можете выполнять поиск на своих серверах в конкретном подразделении Active Directory с помощью командлета **Get-ADComputer** из [модуля PowerShell ActiveDirectory](https://pwsh.ru/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d1%8c-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%8c-act/) или по предоставленному списку серверов **($ servers = ('server1', 'server2'))**.

<div class="37a7539ad6517bcd4d41713f8410c62f" data-index="3" id="bkmrk--4">---

</div>Например, вы хотите найти все файловые серверы с ролью **FileAndStorage-Services** в указанном организационном подразделении AD, то используйте следующий скрипт:

<div id="bkmrk-1-2-3-4-5-6-import-m"><div class="syntaxhighlighter  bash" id="bkmrk-1-2-3-4-5-6-import-m-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Import-Module ActiveDirectory`</div><div class="line number2 index1 alt1">`$Servers=Get-ADComputer -Properties * -Filter {Operatingsystem -notlike ``"*2008 R2*"` `-and enabled -``eq` `"true"` `-and Operatingsystem -like ``"*Windows Server*"``} | ``select` `name`</div><div class="line number3 index2 alt2">`Foreach ($server ``in` `$Servers)`</div><div class="line number4 index3 alt1">`{`</div><div class="line number5 index4 alt2">`    ``Get-WindowsFeature -name FileAndStorage-Services -ComputerName $server.Name | Where installed | ft $server.name, Name, Installstate`</div><div class="line number6 index5 alt1">`}`</div></div></td></tr></tbody></table>

</div></div>[![](https://pwsh.ru/wp-content/uploads/2021/08/Get-WindowsFeature-2.png)](https://pwsh.ru/wp-content/uploads/2021/08/Get-WindowsFeature-2.png)

Пример поиска контроллера домена:

<div id="bkmrk-1-2-3-4-5-6-import-m-2"><div class="syntaxhighlighter  bash" id="bkmrk-1-2-3-4-5-6-import-m-3"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Import-Module ActiveDirectory`</div><div class="line number2 index1 alt1">`$Servers=Get-ADComputer -Properties * -Filter {Operatingsystem -notlike ``"*2008 R2*"` `-and enabled -``eq` `"true"` `-and Operatingsystem -like ``"*Windows Server*"``} | ``select` `name`</div><div class="line number3 index2 alt2">`Foreach ($server ``in` `$Servers)`</div><div class="line number4 index3 alt1">`{`</div><div class="line number5 index4 alt2">`    ``Get-WindowsFeature -name AD-Domain-Services -ComputerName $server.Name | Where installed | ft $server.name, Name, Installstate`</div><div class="line number6 index5 alt1">`}`</div></div></td></tr></tbody></table>

</div></div>В результате вы получите список серверов, на которых установлена конкретная роль.

## Как с помощью PowerShell установить роли и компоненты Windows Server?  


Для установки ролей и компонентов на Windows Server используется командлет Install-WindowsFeature.

Чтобы установить роль DNS-сервера и инструменты управления (включая модуль Powershell DNSServer) на текущий сервер, выполните следующую команду:

<div id="bkmrk-1-install-windowsfea-4"><div class="syntaxhighlighter  bash" id="bkmrk-1-install-windowsfea-5"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Install-WindowsFeature DNS -IncludeManagementTools`</div></div></td></tr></tbody></table>

</div></div>Установка роли «Active Directory Domain Services»:

<div id="bkmrk-1-install-windowsfea-6"><div class="syntaxhighlighter  bash" id="bkmrk-1-install-windowsfea-7"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools`</div></div></td></tr></tbody></table>

</div></div>По умолчанию командлет устанавливает все зависимые роли и компоненты. Чтобы отобразить список зависимостей перед установкой, используйте опцию **-WhatIf**:

<div id="bkmrk-1-install-windowsfea-8"><div class="syntaxhighlighter  bash" id="bkmrk-1-install-windowsfea-9"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Install-WindowsFeature -Name UpdateServices -WhatIf`</div></div></td></tr></tbody></table>

</div></div>[![](https://pwsh.ru/wp-content/uploads/2021/08/Install-WindowsFeature.png)](https://pwsh.ru/wp-content/uploads/2021/08/Install-WindowsFeature.png)

Чтобы установить роль узла сеанса удалённого рабочего стола, роль лицензирования RDS и инструменты удалённого управления RDS, используйте следующую команду:

<div id="bkmrk-1-install-windowsfea-10"><div class="syntaxhighlighter  bash" id="bkmrk-1-install-windowsfea-11"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Install-WindowsFeature -ComputerName ИМЯ_КОМПЬЮТЕРА RDS-RD-Server, RDS-Licensing -IncludeAllSubFeature -IncludeManagementTools -Restart`</div></div></td></tr></tbody></table>

</div></div>Если вы добавите параметр **-Restart**, ваш сервер при необходимости будет автоматически перезагружен.

Вы также можете установить компонент с помощью следующей команды. Например, чтобы установить роль SMTP-сервера:

<div id="bkmrk-1-get-windowsfeature-8"><div class="syntaxhighlighter  bash" id="bkmrk-1-get-windowsfeature-9"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Get-WindowsFeature -Name SMTP-Server | Install-WindowsFeature`</div></div></td></tr></tbody></table>

</div></div>## Как с помощью PowerShell развернуть роли на нескольких удалённых серверах Windows?  


Есть ещё один интересный вариант при развёртывании типовых серверов. Вы можете установить необходимые функции на эталонном сервере Windows и экспортировать список установленных ролей в файл CSV:

<div id="bkmrk-1-2-get-windowsfeatu"><div class="syntaxhighlighter  bash" id="bkmrk-1-2-get-windowsfeatu-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Get-WindowsFeature | where{$_.Installed -``eq` `$True} | ``select` `name | Export-Csv C:\PS\InstalledRoles.csv -NoTypeInformation -Verbose`</div><div class="line number2 index1 alt1">`Get-Content C:\PS\InstalledRoles.csv`</div></div></td></tr></tbody></table>

</div></div>[![](https://pwsh.ru/wp-content/uploads/2021/08/Get-Content.png)](https://pwsh.ru/wp-content/uploads/2021/08/Get-Content.png)

После этого вы сможете использовать этот CSV-файл для установки того же набора ролей на других типичных серверах:

<div id="bkmrk-1-import-csv-c%3A%5Cps%5Cr"><div class="syntaxhighlighter  bash" id="bkmrk-1-import-csv-c%3A%5Cps%5Cr-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Import-Csv C:\PS\Roles.csv | foreach{ Install-WindowsFeature $_.name }`</div></div></td></tr></tbody></table>

</div></div>Если роль или функция уже установлены, команда вернёт NoChangeNeeded и продолжит установку следующей роли.

Или, чтобы установить один и тот же набор ролей на нескольких удалённых серверах, вы можете использовать эту команду:

<div id="bkmrk-1-2-%24servers-%3D-%28%27ny-"><div class="syntaxhighlighter  bash" id="bkmrk-1-2-%24servers-%3D-%28%27ny--1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`$servers = (``'ny-rds1'``, ``'ny-rds2'``,’ny-rds3’,’ny-rds4’)`</div><div class="line number2 index1 alt1">`foreach ($server ``in` `$servers) {Install-WindowsFeature RDS-RD-Server -ComputerName $server}`</div></div></td></tr></tbody></table>

</div></div>## Как с помощью PowerShell удалить роль или компонент на Windows Server?  


Чтобы удалить роли или функции Windows Server, используется командлет Remove-WindowsFeature.

Например, чтобы удалить роль сервера печати, выполните команду:

<div id="bkmrk-1-remove-windowsfeat"><div class="syntaxhighlighter  bash" id="bkmrk-1-remove-windowsfeat-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`Remove-WindowsFeature Print-Server -Restart`</div></div></td></tr></tbody></table>

</div></div>