Windows Server 2022 with PS 第11章

第11章: Windows Serverの機能の有効化と無効化


1. この章で解説する主要な技術・概念(箇条書き)

  1. Windows Server 2022のロールと機能の理解
    • 「ロール(Roles)」と「機能(Features)」の違い
    • サーバーマネージャーとPowerShell(Install/Uninstall-WindowsFeature)の比較
  2. PowerShellを用いた機能の有効化と無効化
    • Get-WindowsFeature, Install-WindowsFeature, Uninstall-WindowsFeature
    • 依存関係やManagement Toolsの自動インストール
  3. 依存関係の管理と機能の最適化
    • 大規模サーバー群での一括スクリプト化
    • 何がアンインストール可能か、前提モジュールを見極めるコツ
  4. GUI環境(Desktop Experience)とServer Core環境の機能管理の違い
    • サーバーマネージャーの「役割と機能の追加」 vs. PowerShell主体の操作
    • Server CoreでGUIコンポーネントを追加できるか?
  5. 機能管理のベストプラクティスとセキュリティへの配慮
    • 最小インストール原則(不要なロール・機能を外す利点)
    • 残しておくと危険な機能例、セキュリティ影響の把握
  6. 実務例:一括スクリプトと監査スクリプト
    • 構成ファイル(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での標準手順

  1. PowerShellまたはsconfigメニューからInstall-WindowsFeatureコマンド実行。
  2. 依存関係も自動的に解決される。
  3. 必要に応じて再起動(-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などのパッケージ管理ツールを使った一括管理も紹介し、本章の“機能管理”の延長としてアプリケーションのライフサイクル管理を学んでいきましょう。