Windows Server 2012 R2/2016/2019 환경에서는 그래픽 기반의 서버 관리자(Server Manager) 콘솔을 사용해 서버 역할(Role)과 기능(Feature)을 설치하거나 제거할 수 있습니다. 하지만 대부분의 경우 PowerShell 콘솔을 활용하면 훨씬 더 빠르고 효율적으로 동일한 작업을 수행할 수 있습니다. 이 글에서는 최신 Windows Server 버전에서 PowerShell로 역할과 기능을 관리하는 방법을 자세히 살펴보겠습니다.
PowerShell로 설치된 Windows Server 역할 및 기능 목록 조회하기
Get-WindowsFeature cmdlet을 사용하면 Windows Server에서 사용 가능한 모든 역할과 기능의 목록을 확인할 수 있습니다. 매개변수 없이 실행하면 Windows Server 구성 요소 전체에 대한 정보가 표시됩니다.
출력 결과에는 구성 요소의 표시 이름(Display Name), 시스템 이름(Name), 그리고 설치 상태(Install State: Installed, Available, Removed)가 나타납니다. 역할과 기능 목록은 서버 관리자 GUI에서 역할을 설치할 때 보는 것과 유사하게 중첩된 트리 구조로 표시됩니다. PowerShell로 역할이나 기능을 설치·제거하려면 Name 열에 표시된 시스템 이름을 반드시 알아야 합니다.
참고: 역할이나 기능의 상태가 Removed로 표시되어 있다면, WinSxS 폴더 크기를 줄이기 위해 해당 설치 파일이 시스템 구성 요소 저장소에서 제거된 것입니다. 이 경우 인터넷에 직접 연결되어 있거나 Windows Server 설치 ISO가 없으면 해당 역할을 설치할 수 없습니다(.Net 3.5 설치 사례 참고).
온라인 상태에서 다음과 같이 역할이나 구성 요소를 이미지에서 제거할 수 있습니다:
Uninstall-WindowsFeature –Name DHCP –Remove
제거된 DHCP 역할을 다시 설치하려면 아래 cmdlet을 사용합니다(직접적인 인터넷 연결 필요):
Install-WindowsFeature DHCP
또는 Windows Server ISO 이미지에서 구성 요소 바이너리 파일을 복원할 수도 있습니다:
Install-WindowsFeature DHCP -Source E:\sources\sxs
현재 설치된 서버 기능만 나열하려면 다음 명령어를 사용합니다:
Get-WindowsFeature | Where-Object {$_. installstate -eq "installed"} | ft Name,Installstate
아래 스크린샷을 보면 이 서버가 파일 서버로 사용 중임을 알 수 있습니다(FileAndStorage-Services, Storage-Services 역할 설치됨). 나머지 구성 요소 대부분은 서버 관리나 모니터링 용도입니다.

역할 이름을 정확히 모르는 경우 와일드카드를 사용할 수 있습니다. 예를 들어 IIS 역할의 웹 구성 요소 중 어떤 것이 설치되어 있는지 확인하려면 다음 명령어를 실행합니다(약간 축약된 구문):
Get-WindowsFeature -Name web-* | Where installed

원격 Windows Server에 설치된 구성 요소 목록도 조회할 수 있습니다:
Get-WindowsFeature -ComputerName ny-spool1 | Where installed | ft Name,Installstate
설치된 Print-Services와 Print-Server 역할을 보면, 이 서버가 인쇄 서버로 사용되고 있음을 알 수 있습니다.

Get-WindowsFeature cmdlet을 활용하면 도메인 내에서 특정 역할이 설치된 서버를 찾을 수도 있습니다. PowerShell ActiveDirectory 모듈의 Get-ADComputer cmdlet을 사용해 특정 Active Directory OU의 서버를 검색하거나, 직접 서버 목록을 지정할 수 있습니다($servers = ('server1', 'server2')).
예를 들어, 지정된 AD 조직 단위(OU)에서 FileAndStorage-Services 역할이 설치된 모든 파일 서버를 찾고 싶다면(여기서는 PowerShell 편집기로 Visual Studio Code를 사용) 다음 스크립트를 사용합니다:
import-module activedirectory
$Servers=get-adcomputer -properties * -Filter {Operatingsystem -notlike "*2008 R2*" -and enabled -eq "true" -and Operatingsystem -like "*Windows Server*"} -SearchBase 'OU=Servers,OU=UK,DC=woshub,DC=com' |select name
Foreach ($server in $Servers)
{
Get-WindowsFeature -name FileAndStorage-Services -ComputerName $server.Name | Where installed | ft $server.name, Name, Installstate
}
실행 결과로 특정 역할이 설치된 서버 목록을 얻을 수 있습니다.

PowerShell로 Windows Server 역할 및 기능 설치하기
Windows Server에 역할과 기능을 설치하려면 Install-WindowsFeature cmdlet을 사용합니다.
현재 서버에 DNS 서버 역할과 관리 도구(PowerShell DNSServer 모듈 포함)를 설치하려면 다음 명령어를 실행합니다:
Install-WindowsFeature DNS -IncludeManagementTools
기본적으로 이 cmdlet은 종속된 역할과 기능을 모두 함께 설치합니다. 설치 전에 종속성 목록을 미리 확인하려면 WhatIf 옵션을 사용합니다:
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.
원격 데스크톱 세션 호스트(RDS Session Host) 역할, RDS 라이선싱 역할, RDS 원격 관리 도구를 설치하려면 다음 명령어를 사용합니다:
Install-WindowsFeature -ComputerName lon-rds3 RDS-RD-Server, RDS-Licensing –IncludeAllSubFeature –IncludeManagementTools –Restart

–Restart 매개변수를 추가하면 필요한 경우 서버가 자동으로 재시작됩니다.
다음과 같은 방식으로도 구성 요소를 설치할 수 있습니다. 예를 들어 SMTP 서버 역할을 설치하는 경우:
Get-WindowsFeature -Name SMTP-Server | Install-WindowsFeature
여러 대의 원격 Windows Server에 역할 배포하기
동일한 구성의 서버를 여러 대 배포할 때 유용한 방법이 있습니다. 기준이 되는 참조(Reference) Windows Server에 필요한 기능을 설치한 뒤, 설치된 역할 목록을 CSV 파일로 내보내는 것입니다:
Get-WindowsFeature | where{$_.Installed -eq $True} | select name | Export-Csv C:\PS\InstalledRoles.csv -NoTypeInformation –Verbose

이후 이 CSV 파일을 사용해 다른 동일한 사양의 서버들에 같은 역할 세트를 설치할 수 있습니다:
Import-Csv C:\PS\Roles.csv | foreach{ Install-WindowsFeature $_.name }

이미 설치되어 있는 역할이나 기능이 있다면 명령은 NoChangeNeeded를 반환하고 다음 역할 설치를 계속 진행합니다.
또는 여러 대의 원격 서버에 동일한 역할 세트를 설치하려면 다음 명령어를 사용할 수 있습니다:
$servers = ('ny-rds1', 'ny-rds2','ny-rds3','ny-rds4')
foreach ($server in $servers) {Install-WindowsFeature RDS-RD-Server -ComputerName $server}
PowerShell로 Windows Server 역할 및 기능 제거하기
Windows Server 역할이나 기능을 제거하려면 Remove-WindowsFeature cmdlet을 사용합니다.
예를 들어 인쇄 서버 역할을 제거하려면 다음 명령어를 실행합니다:
Remove-WindowsFeature Print-Server -Restart