第11章: Windows Serverの機能の有効化と無効化
1. この章で解説する主要な技術・概念(箇条書き)
- Windows Server 2022のロールと機能の理解
- 「ロール(Roles)」と「機能(Features)」の違い
- サーバーマネージャーとPowerShell(Install/Uninstall-WindowsFeature)の比較
- PowerShellを用いた機能の有効化と無効化
Get-WindowsFeature
, Install-WindowsFeature
, Uninstall-WindowsFeature
- 依存関係やManagement Toolsの自動インストール
- 依存関係の管理と機能の最適化
- 大規模サーバー群での一括スクリプト化
- 何がアンインストール可能か、前提モジュールを見極めるコツ
- GUI環境(Desktop Experience)とServer Core環境の機能管理の違い
- サーバーマネージャーの「役割と機能の追加」 vs. PowerShell主体の操作
- Server CoreでGUIコンポーネントを追加できるか?
- 機能管理のベストプラクティスとセキュリティへの配慮
- 最小インストール原則(不要なロール・機能を外す利点)
- 残しておくと危険な機能例、セキュリティ影響の把握
- 実務例:一括スクリプトと監査スクリプト
- 構成ファイル(CSVやJSON)を使って大量サーバーへの機能適用を自動化
- 機能の有効/無効を監査するスクリプト設計
2. Windows Server 2022のロールと機能の理解
2-1. 「ロール(Roles)」と「機能(Features)」の違い
- ロール(Roles)
- Windows Serverを特定のサーバー用途で使用するための大きなコンポーネント群。
- 例: IIS (Web Server), DNS Server, Active Directory Domain Services, Hyper-Vなど。
- それぞれが複数のサブコンポーネント(ロールサービス)を含む。
- 機能(Features)
- ロールを補完する追加コンポーネント、または共通の管理機能。
- 例: .NET Framework, BitLocker, Failover Clustering, RSAT (Remote Server Administration Tools)など。
- ロールと並列で扱われるが、より軽量・補助的な位置付け。
2-2. サーバーマネージャーとPowerShell管理の比較
- サーバーマネージャー(GUI):
- 役割と機能のウィザードで逐次コンポーネントを選択し、依存関係を自動補完してくれる。
- GUI版(Desktop Experience)であれば直感的に操作しやすいが、大規模運用やServer Coreでは使いにくい。
- PowerShell (
Install-WindowsFeature
, Uninstall-WindowsFeature
):
- 依存関係も自動解決が可能。
- スクリプト化して一括適用やバッチ削除が容易。
- Server Core環境でも同じ手順で操作できるため、統一管理に適している。
3. PowerShellを用いた機能の有効化と無効化
3-1. Get-WindowsFeature で一覧とステータス確認
Get-WindowsFeature
- Name, Display Name, Installedの三列を持つ一覧が表示される。
- Installed = True であれば既に導入済み。
- フィルタをかける例:
Get-WindowsFeature | Where-Object { $_.Installed -eq $true }
で導入済みのみ表示。
3-2. Install-WindowsFeature での有効化例
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
-IncludeManagementTools
を付けると、IIS Managerなどの管理ツールを同時インストール。
- 依存関係を自動で解決して、必要なサブロールや機能を追加する。
- インストール後、必要に応じてサーバー再起動が要求される場合がある。
- Server Coreでも同じコマンドでOK(GUIツールはインストールされてもローカルでは使えないが、リモートGUIやWACで使える)。
3-3. Uninstall-WindowsFeature での無効化例
Uninstall-WindowsFeature -Name Web-Server
- IISをアンインストールし、関連コンポーネントを削除。
-Restart
オプションで再起動自動化、または後から手動再起動も可能。
- 依存しているロール・機能がある場合、エラーとなるか、Add/Removeメニューで関連するものを同時に削除するか選択肢が提示される。
4. 依存関係の管理と機能の最適化
4-1. 大規模サーバー群での一括スクリプト
- CSVやJSONなどに
- サーバー名 / 必要なロールと機能のリスト
- 実行するコマンド (Install/Uninstall)
などをまとめ、Invoke-Command
で一気に適用可能。
$servers = Import-Csv "C:\ServerFeatures.csv" # Columns: ServerName, FeatureList
foreach ($srv in $servers) {
$features = $srv.FeatureList -split ";"
Invoke-Command -ComputerName $srv.ServerName -ScriptBlock {
param($fs)
foreach ($f in $fs) {
Install-WindowsFeature -Name $f
}
} -ArgumentList $features
}
- こうした仕組みを用いれば、新規サーバー展開時に構成のばらつきを防げる。
4-2. 何がアンインストール可能か見極めるコツ
- Server Coreなどで最初からGUIコンポーネントがない場合、さらに削れる機能は少ない。
- GUI版(Desktop Experience)では、
Uninstall-WindowsFeature
で “Server-Gui-Shell” や “Server-Gui-Mgmt-Infra” を削除してコア化するシナリオは、Windows Serverの旧バージョンでは非推奨/一部非対応となっているため、基本的にクリーンインストール時点でServer Coreを選ぶべき。
- 重要な機能(.NET Frameworkなど)は他のアプリが利用しているケースも多いので、依存関係を
Get-WindowsFeature -Name <Feature> | Select-Object -ExpandProperty DependsOn
などで確認。
5. GUI環境(Desktop Experience)とServer Core環境の機能管理の違い
5-1. GUI版のサーバーマネージャー「役割と機能の追加」
- ウィザード形式で選択肢をチェックボックス的にオン/オフする。
- 依存関係も表示されるため、初心者にも分かりやすい。
- ただし、大量サーバーで同じ作業を繰り返すには向かない。
5-2. Server Coreでの標準手順
- PowerShellまたはsconfigメニューから
Install-WindowsFeature
コマンド実行。
- 依存関係も自動的に解決される。
- 必要に応じて再起動(
-Restart
)。
- GUIコンポーネントやサーバーマネージャー自体をインストールすることはできない(Windows Server 2012までの “Minimal Server Interface” やGUI切り替えは廃止された)。
6. 機能管理のベストプラクティスとセキュリティへの配慮
6-1. 最小インストール原則(攻撃対象面の縮小)
- Attack Surface Reduction
- 不要な機能がインストールされているほど、脆弱性を含む可能性が高まる。
- 例: IISやSMTP Serverが必要ないのにインストールされていると、余計なポートが開き、攻撃リスク増大。
- ロール単位の専用サーバー
- ADドメインコントローラーには基本的に不要なロールを入れない、ファイルサーバーにはDNSを入れないなど、役割分割がセキュリティ上安全。
6-2. 残しておくと危険な機能例
- SMB 1.0: 旧バージョンは脆弱性(WannaCryなど)で狙われやすい。不要なら削除する。
- Telnet Client/Server: 平文通信のため危険度が高い。原則無効化推奨。
- FTP Server: FTP自体が平文通信。SFTP/FTPSへ移行するか必要最低限の環境でのみ導入。
6-3. 構成管理ツールとの連携
- Chef, Ansible, Puppetなどの構成管理ツールからPowerShell Cmdletを呼び出し、Windowsロール/機能を確実に一致させる構成を実現するケースもある。
- 大規模運用ではInfrastructure as Code (IaC)を目指すため、
Install-WindowsFeature
コマンドがモジュール化されたプレイブック/レシピに組み込まれる。
7. 実務例:一括スクリプトと監査スクリプト
7-1. 大量サーバーでの一括インストール例
# InstallFeatureList.ps1
param(
[string[]]$Servers,
[string[]]$Features
)
foreach ($srv in $Servers) {
Write-Host "Installing features on $srv..."
Invoke-Command -ComputerName $srv -ScriptBlock {
param($fs)
foreach ($f in $fs) {
Install-WindowsFeature -Name $f -IncludeManagementTools
}
} -ArgumentList $Features
}
- 実行:
$servers = "Server01","Server02" $features = "Web-Server","NET-Framework-45-Features" .\InstallFeatureList.ps1 -Servers $servers -Features $features
- これで複数サーバーに一気にIISや.NETを導入。
7-2. 機能監査スクリプト例
# Audit-Features.ps1
$allFeatures = Get-WindowsFeature
$installed = $allFeatures | Where-Object Installed -eq $true
Write-Host "Installed Features:"
$installed | Select-Object Name, DisplayName
- サーバーごとにこれをリモート実行して結果を集約すれば、各サーバーでどの機能が有効になっているかを一覧化できる。
- 差分管理(前回と比較し、新たに何が追加/削除されたか)を記録することで、運用の透明性が高まる。
8. 章末まとめと次章へのつながり
8-1. 学習のまとめ
- Windows Server 2022のロールと機能の概念を整理し、サーバーが担う役割に応じて必要な機能だけを追加・不要な機能を削除する「最小インストール原則」がセキュリティとパフォーマンスに有効であると理解しました。
Get-WindowsFeature
, Install-WindowsFeature
, Uninstall-WindowsFeature
によるPowerShellベースの管理で、大規模サーバー環境でも一貫した構成適用が実現可能。
- Server Core vs. GUI版での機能管理手順の違いや、GUI版でもServer Core化は容易ではない点など、バージョンやエディションによる制限にも注意。
- 依存関係の把握とセキュリティ考慮(SMB1, Telnetなど古い・危険な機能の排除)を同時に進めることで、サーバーの攻撃対象面(Attack Surface)を減らす効果が大きい。
- スクリプト化と監査スクリプトにより、インストール状況を可視化し、運用における構成ドリフトを最小化できる。
8-2. 次章へのつながり
- 次章(第12章)では、サードパーティー製アプリケーションの管理にフォーカスします。
- 本章でWindows Serverの標準ロールや機能を整備したうえで、さらに外部製品(PDF生成ツールやミドルウェアなど)をどう自動化インストール・アンインストールするかが次の課題となる。
- Chocolateyなどのパッケージ管理ツールを使った一括管理も紹介し、本章の“機能管理”の延長としてアプリケーションのライフサイクル管理を学んでいきましょう。