Windows Server 2012R2/2016/2019 จัดการ Roles/Features ผ่าน Server Manager GUI ได้ แต่ PowerShell เร็วกว่ามาก
List Installed Roles & Features
Get-WindowsFeature แสดงทั้งหมด (Display Name, Name, Install State: Installed/Available/Removed)
Removed = ไฟล์ถูกลบจาก Component Store (WinSxS) ติดตั้งใหม่ต้อง Internet หรือ ISO
Uninstall-WindowsFeature –Name DHCP –Remove
Install-WindowsFeature DHCP # ต้อง Internet
Install-WindowsFeature DHCP -Source E:\sources\sxs # จาก ISO
List Installed Only:
Get-WindowsFeature | Where-Object {$_.installstate -eq "installed"} | ft Name,Installstate
Wildcard: Get-WindowsFeature -Name web-* | Where installed (IIS Components)
Remote Server: Get-WindowsFeature -ComputerName ny-spool1 | Where installed | ft Name,Installstate
ค้นหา Server ใน AD OU ที่มี Role เฉพาะ:
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
}
Install Roles & Features
Install-WindowsFeature
# DNS + Management Tools
Install-WindowsFeature DNS -IncludeManagementTools
# Check Dependencies
Install-WindowsFeature -Name UpdateServices -WhatIf
Output แสดง Dependencies (WSUS ต้อง IIS Components ฯลฯ)
# RDS Session Host + Licensing + Mgmt Tools + Auto Restart
Install-WindowsFeature -ComputerName lon-rds3 RDS-RD-Server, RDS-Licensing –IncludeAllSubFeature –IncludeManagementTools –Restart
Pipeline: Get-WindowsFeature -Name SMTP-Server | Install-WindowsFeature
Deploy Roles บนหลาย Server
Export Installed Roles จาก Reference Server:
Get-WindowsFeature | where{$_.Installed -eq $True} | select name | Export-Csv C:\PS\InstalledRoles.csv -NoTypeInformation –Verbose
Import ติดตั้งบน Server อื่น:
Import-Csv C:\PS\Roles.csv | foreach{ Install-WindowsFeature $_.name }
Already Installed → NoChangeNeeded ข้ามต่อ
Multiple Remote Servers:
$servers = ('ny-rds1', 'ny-rds2', 'ny-rds3', 'ny-rds4')
foreach ($server in $servers) { Install-WindowsFeature RDS-RD-Server -ComputerName $server }
Uninstall Role/Feature
Remove-WindowsFeature
Remove-WindowsFeature Print-Server -Restart