PowerShell — Install-WindowsFeature (и семья) отсутствует в Windows 10?
У нас есть несколько сценариев Powershell, используемых для настройки различных сред dev /test /prod, и один из них устанавливает и настраивает IIS. К сожалению, в настоящее время эти сценарии не работают под Windows 10, так как отсутствует командлет Install-WindowsFeature.
Если они умышленно удалены или есть какое-то обруч, мне нужно перепрыгнуть, чтобы установить их, которые раньше не были нужны?
2 ответа
В то время как ответ Райана верен, я бы рекомендовал держаться подальше от командлетов Install-WindowsFeature , если вы хотите запускать свои скрипты на рабочих станциях в качестве Что ж. Вы всегда будете зависить от RSAT, даже если вам это не нужно.
Просто используйте Enable-WindowsOptionalFeature , который работает на серверах и рабочих станциях. Вам нужно будет изменить свои скрипты, имена функций тоже разные.
Это еще не все. Как всегда, средства удаленного администрирования сервера (RSAT — также включает командлеты *-WindowsFeature ) всегда были очень чувствительны к версии ОС. То есть вы должны использовать Windows 7 RSAT в Windows 7 для управления сервером Server 2008 R2, Windows 8.1 RSAT в Win 8.1 для управления сервером 2012 R2 и т. Д. Использование RSAT по версиям ОС может работать, но это может также неожиданно падает. Командлеты *-WindowsFeature являются технически частью ServerManager , и поскольку сервер 2016 еще не вышел, вы можете не видеть эти командлеты некоторое время.
Или, если нет, просто найдите нижнюю рабочую станцию Windows для удаленного администрирования.
Как в Powershell установить роли и компоненты используя Install-WindowsFeature и Add-WindowsCapability
Для установки ролей и компонентов в Powershell есть 3 основные команды Install-WindowsFeature, Enable-WindowsOptionalFeature и Add-WindowsCapability. Каждая из этих команд имеет свое применение и может отличаться в разных релизах Windows. В этой статье будет рассмотрен процесс установки ролей и компонентов используя обе команды на примерах.
Навигация по посту
Типы команд устанавливающие роли с Powershell
В Windows есть множество команд, с помощью которых можно установить роль или компонент. Если учесть все команды, которые можно использовать в Powershell — получится следующий список:
- Add-WindowsCapability;
- Enable-WindowsOptionalFeature;
- Install-WindowsFeature;
- Add-WindowsFeature;
- dism.exe;
- pkgmgr.exe.
Командлеты, которые относятся только к Powershell разделяются на 3 типа:
- WindowsFeature — относится к модулю ServerManager. Имеет возможности относящиеся только Windows Server и установке и удалению ролей и компонентов;
- WindowsOptionalFeature — относится к модулю DISM, который наследует функционал аналогичной cmd утилиты. Основное предназначение — работа с компонентами Windows. Компоненты доступные через эти команды можно увидеть в GUI "Включение или отключение компонентов Windows". Это старый функционал и его компоненты переезжают в интерфейс Windows 10;
- WindowsCapability — так же относятся к DISM. Команда, которая постепенно заменяет 'WindowsOptionalFeature'. Имеет возможность установки компонентов из Windows Update. Если какие-то компоненты не получается найти через предыдущую команду, используйте эту.
Вывести все командлеты можно посмотреть так:

Если вы пользуетесь старыми версиями ОС, то какие-то модули могут быть не доступны. 2019 сервер одинаков с 2016:

Буква А обозначает алиас. Add-WindowsFeature, в 2016+ эта та же команда, что и Install-WondowsFeature.
Сама установка ролей не обозначает и ее настройку. После установки, обычно, появляется множество команд для настройки роли.
Получение списка ролей и их установка с Powershell Install-WindowsFeature
Что бы получить список ролей можно использовать Get-WindowsFeature. Эта команда, как и все 'WindowsFeature', может работать локально и удаленно. По умолчанию она возвращает роли и компоненты. Несколько примеров выполнения командлета:

Имена для установки роли берутся из колонки 'Name'. Если вы до сих пор плохо понимаете что именно получает и устанавливает эта команда — откройте 'Server Manager' на 'Windows Server' и посмотрите меню установки:


Сам пакет WindowsFeature (модуль ServerManager) может быть установлен на Windows 10 с RSAT.
Базовая установка роли, но не совсем верная, на примере Active Directory Domain Services, будет следующей:

Перед использованием командлета обратите внимание на 2 параметра, которые вы можете указать:
- IncludeManagementTools — добавляет к установке модули Powershell и панели администрирования;
- IncludeAllSubFeature — подразумевает, что вы устанавливаете не одну роль, а всю вложенную ветку.
Если вы забудете указать параметры указанные выше, то команду можно будет выполнить повторно с их включением.
Так же доступны следующие параметры:
- LogPath — путь до файла, в который вы хотите сохранить лог установки;
- Restart — перезагрузить компьютер если это понадобится после установки;
- Source — внешний источник для установки роли;
- Vhd — установка на vhd диск;
- ConfigurationFilePath — перед установкой роли в Server Manager он предлагает сохранить конфигурацию. Это конфигурацию можно использовать здесь.
Если бы я устанавливал Active Directory на обычный GUI сервер, удаленно, то это бы выглядело так:

Если удаленный сервер работает под другими учетными данными, то передать их можно использовав команду 'Get-Credential'. В 'ComputerName' можно указывать как DNS имя, так и IP адрес.
Пример установки нескольких ролей подряд, удаленно и под другими учетными данными:

Удалить роль можно так:
Если добавить параметр 'Remove', то роль будет удалена еще и с папки 'WinSxS'. Остальные параметры аналогичны.
Установка компонентов с Enable-WindowsOptionalFeature
Список компонентов, с которыми можно работать команда группы 'WindowsOptionalFeature' аналогичны следующем окну:

Учитывая, что это окно уже является наследием более старых систем (до Windows 10), вы можете не найти все компоненты. Например RSAT, который раньше можно было найти в этом окне, теперь доступен через интерфейс 'Приложения и возможности' Windows 10. Команды в этих случаях тоже отличаются.
Для получения всех компонентов нужно выполнить следующую команду:

Параметр '-Online' говорит, что пакеты будут искаться на этом же компьютере. Можно поставить '-Path', с указанием пути до образа Windows, что бы увидеть какие компоненты доступны там.
Несколько вариантов выполнения команды:

Учитывая, что команды относятся к модулю 'DISM', мы можем работать с образами используя параметры 'PackagePath' и 'Path'. Такая возможность есть во всех командах 'WindowsOptionalFeature'.
Для того, что бы включить компонент нужно выполнить следующую команду:
В следующей команде указано, что нам нужно собрать все логи (а не только ошибки) и сохранить их по указанному пути:

Отключение приложения выполняется следующим образом:
WindowsOptionalFeature так же используется для подготовки Nano сервера т.к. там нет WindowsFeature и пакеты с ролями сначала импортируются, а затем включаются.
Установка компонентов с Add-WindowsCapability
В предыдущем разделе было упомянуто о переезде многих компонентов в интерфейс Windows 10. Командлеты 'WindowsCapability' работают именно с ними. Если мы выполним следующую команду, которая очень похожа на предыдущую, то мы увидим совершенно разные пакеты:

Эти компоненты соответствуют следующему окну в Windows 10:

Некоторый варианта выполнения программы:

В отличие от предыдущей команды — эта программа может устанавливать компоненты из Windows Update. Поэтому в ней можно увидеть значения 'DownloadSize' и 'InstallSize'. В остальном это одинаковые команды.
Командлет PowerShell Install-WindowsFeature вызывается из-за ошибок C# и не указан в коллекциях команд
Я пытаюсь установить новые функции в системе Windows Server 2012 через PowerShell и C#. Я получаю эту ошибку обратно при попытке вызвать Install-WindowsFeature командлет:
Термин «Install-WindowsFeature» не распознается как имя командлета, функции, файла сценария или исполняемой программы.
Я могу вызывать другие командлеты через C# и даже некоторые другие новые. я сделал Get-Command и Install-WindowsFeature , Remove-WindowsFeature и Get-WindowsFeatures не указаны . но около 980 других есть.
Почему я не могу вызвать этот командлет из своей программы на C#, но когда я перехожу к PowerShell, он вызывает его нормально?
Это в каком модуле? Может дело в модуле, который по умолчанию не импортируется с такой перегрузкой CreateRunspace . Вы можете добавить модули ps в InitialSessionState объект, который вы передаете другой перегрузке CreateRunspace . — Mike Zboray
Он находится в модуле ServerManager. Я никогда не использовал объект InitialSessionState, мне придется изучить это. — Ryan Watson