ここから本文です

増殖するOperatingSystemSKU――Windows Serverのインストールオプションの識別あれこれ

8/2(水) 7:55配信

@IT

●主要なWindows ServerのOperatingSystemSKU値の一覧

WSH(Windows Script Host)スクリプトでSKU番号を利用し、エディションとインストールオプションを識別

 Windows VistaおよびWindows Server 2008以降では、エディションやインストールオプションごとに「OperatingSystemSKU」の番号を持ち、この「SKU(Stock Keeping Unit)」と呼ばれる製品番号で識別できます。前回説明したように、正確に識別するには、Windowsのバージョン番号(6.1、6.2、6.3x、10.xなどの内部バージョン)とSKU番号を組み合わせて判断する必要があります。最新のOperatingSystemSKUの完全な一覧というものは、筆者は目にしたことはありませんが、主要な製品については以下のドキュメントから分かります。

 ローカルコンピュータのWindowsのバージョンとSKU番号を確認するには、コマンドプロンプトやWindows PowerShellウィンドウで、次の「WMIC」コマンドまたは「gwmi」コマンドレットを実行します。

□□
・コマンドプロンプトの場合は「WMIC」コマンドで値を確認
C:\> WMIC OS GET Version
C:\> WMIC OS GET Version, OperatingSystemSKU
□□

 PowerShellの場合は、次のようなコマンドラインで確認することもできます。

□□
・Windows PowerShellの場合は「gwmi」コマンドレット(Get-WmiObjectのエイリアス)で値を確認
PS C:\> gwmi win32_operatingsystem | Select Version, OperatingSystemSKU
□□

 Windows Server 2016やWindows 10 バージョン1607(Anniversary Update)以降では、「Get-ComputerInfo」コマンドレットも利用できます。Get-ComputerInfoコマンドレットは、Windows標準の「Msinfo32.exe(システム情報)」ユーティリティーや「Systeminfo.exe」コマンドのPowerShell版のようなものです。Systeminfo.exeコマンドはNano Serverでは利用できませんが、Get-ComputerInfoコマンドレットは使用可能です。Nano Serverについては、後で説明します。

□□
・「Get-ComputerInfo」コマンドレットはNano Serverでも使用可能
PS C:\> Get-ComputerInfo | Select OSVersion, OSOperatingSystemSKU
□□

 以下の表は、筆者が実際にこの目で確認した主要なWindows ServerのSKU番号の一覧です。Windows Serverのバージョンの若い方から並べました。この他にも、Windows Storage Server、Windows Server Essentials、Windows MultiPoint Server、Microsoft Hyper-Vなど、さまざまなエディションがありますが、実際にこの目でSKU番号を確認していないので一覧には含めていません。

○Windows Server 2008(内部バージョン6.0.*)/2008 R2(内部バージョン6.1.*)
・SKU番号/エディション
7/Standard フルインストール
8/Datacenter フルインストール
10/Enterprise フルインストール
12/Datacenter Server Coreインストール
13/Standard Server Coreインストール
14/Enterprise Server Coreインストール

○Windows Server 2012(内部バージョン6.2.*)/2012 R2(内部バージョン6.3.*)
・SKU番号/エディション
7/Standard
8/Datacenter
79/Standard Evaluation(180日評価版)
80/Datacenter Evaluation(180日評価版)

○Windows Server 2016(内部バージョン10.0.*)
・SKU番号/エディション
7/Standard
8/Datacenter
79/Standard Evaluation(180日評価版)
80/Datacenter Evaluation(180日評価版)
143/Datacenter Nano Server
144/Standard Nano Server



●Windows Server 2008/2008 R2のインストールオプションとSKUの関係

 Windows ServerのSKU番号の一覧を見て、DatacenterやStandardなど、同じエディションでもインストールオプションによってSKU番号が異なる場合があることに気が付くでしょう。Windows Server 2008/2008 R2では、Datacenter、Enterprise、Standardの各エディションに対応して、インストールオプションが「フルインストール」であるか「Server Coreインストール」であるかによって別のSKU番号になっています。例えば、Windows Server 2008 R2 StandardのフルインストールはSKU番号「7」ですが、Server CoreインストールはSKU番号「13」です。

 このSKU番号の違いを利用すれば、例えばバッチコマンドやスクリプト内で、エディションやインストールオプションごとに異なる処理を実行させることができるようになります。

●Windows Server 2012/2012 R2はSKU番号でインストールオプションを区別しない

 Windows Server 2012/2012 R2では、インストールオプションの「GUI使用サーバー」が以前の「フルインストール」に相当します。以前と同様に、インストール時にインストールオプションとして「GUI使用サーバー」または「Server Coreインストール」を選択してインストールします。しかし、どちらでインストールした場合でも、SKU番号は同じになります。Windows Server 2012/2012 R2は、エディションでのみSKU番号が区別され、インストールオプションでは区別されなくなったのです。

 その理由は簡単です。Windows Server 2012/2012 R2では、インストール完了後に「サーバーマネージャー」の「役割と機能」から以下のコンポーネントを追加または削除することで、Server CoreインストールからGUI使用サーバーに、あるいはGUI使用サーバーからServer Coreインストールに切り替えることができるようになったからです。

□□□
・サーバー グラフィック シェル(Server-Gui-Shell)
・グラフィック管理ツールとインフラストラクチャ(Server-Gui-Mgmt-Infra)
□□□

 インストールオプションは初期状態でインストールされるコンポーネントの違いにすぎず、SKU番号で区別するべきものではなくなりました。

 ここで問題になるのは、以前のようにSKU番号でインストールオプションを識別できなくなったことです。筆者が考えたのは「サーバー グラフィック シェル(Server-Gui-Shell)」機能がインストールされていればGUI使用サーバー、インストールされていなければServer Coreインストールと判断する方法です。PowerShellであれば、次のように簡単に記述できます。

□□
・「サーバー グラフィック シェル(Server-Gui-Shell)」機能のインストールの有無を確認
PS C:\> if((Get-WindowsFeature -name Server-Gui-Shell).InstallState -eq "Installed") {Write-Host "GUI Install"} else {Write-Host "Server Core Install"}
□□


●Windows Server 2016で再びインストール後の切り替え不可に! SKU番号は?

 Windows Server 2016では、インストールオプションから「Server Coreインストール」という表現は消え、従来の「フルインストール」「GUI使用サーバー」に相当するものは「デスクトップエクスペリエンス」という名称に変更されました。

 例えば、インストールオプション「Windows Server 2016 Datacenter」はServer Coreインストール、「Windows Server 2016 Datacenter(デスクトップエクスペリエンス)」が従来の「フルインストール」や「GUI使用サーバー」に相当するものです。そして重要な点は、これらのインストールオプションは、“インストール後に切り替えることができなくなった”ということです。

 また、Windows Server 2016では、「Nano Server」というServer Coreインストールよりも軽量なインストールオプションが追加されました。このオプションは、インストールメディアの「NanoServer\NanoServer.wim」ファイルをカスタマイズして、物理サーバや仮想マシンに展開するという方法でインストールします。あるいは、WindowsコンテナのベースOSイメージ(microsoft/nanoserver)として、Docker Hubリポジトリから入手します。

 Win32_OperatingSystem classのドキュメントを見ると、次のようにServer CoreインストールのSKU番号として「147」と「148」が用意されているように読み取れます。

□□□
PRODUCT_STANDARD_SERVER (7)
 Windows Server Standard Edition (Desktop Experience installation)
PRODUCT_DATACENTER_SERVER (8)
 Windows Server Datacenter Edition (Desktop Experience installation)
PRODUCT_DATACENTER_NANO_SERVER (143)
 Windows Server Datacenter Edition (Nano Server installation)
PRODUCT_STANDARD_NANO_SERVER (144)
 Windows Server Standard Edition (Nano Server installation)
PRODUCT_DATACENTER_WS_SERVER_CORE (147)
 Windows Server Datacenter Edition (Server Core installation)
PRODUCT_STANDARD_WS_SERVER_CORE (148)
 Windows Server Standard Edition (Server Core installation)
□□□

 しかし、実際に確認してみると、そうではありませんでした。例えば、Windows Server 2016の場合、デスクトップエクスペリエンスでインストールしても、Server Coreインストールでインストールしても、SKU番号は同じ「8」(Get-ComputerInfoコマンドレットは、番号ではなく「DatacenterServerEdition」)を返します。SKU番号「147」と「148」は別の目的に使われているのか、それとも将来のために予約されているのか、それともWindows Server 2016の不具合(実装漏れ)なのかは、現時点では不明です。仮想マシンで動作するNano Serverは、別のSKU番号で期待通りに区別できました。

 Windows Server 2016には「サーバー グラフィック シェル(Server-Gui-Shell)」という機能は存在しないため、Windows Server 2012/2012 R2の方法でインストールオプションを識別することができません。ではどうすればよいのか。Get-ComputerInfoコマンドレットが出力する膨大な情報を眺めていたら、「WindowsInstallationType」と「OsServerLevel」が使えそうなことが分かりました。

 WindowsコンテナのベースOSイメージとしてのNano Server(microsoft/nanoserver)は、面白い結果を返しました。「WindowsInstallationType」と「OsServerLevel」は、それぞれ「Nano Server」と「NanoServer」を返しました。

 Windows Serverコンテナとして実行した場合(ホストとカーネルを共有)、OsOperatingSystemSKUはコンテナホストのSKU番号を返しているようです。Hyper-Vコンテナとして実行した場合(カーネルを提供する専用の仮想マシン上で動く)、Win32_OperatingSystem classのドキュメントには書かれていない(非公表と思われる)SKU番号「149」を返しました。

 ちなみに、Windows Server Coreイメージ(microsoft/windowsservercore)をベースOSイメージとしてHyper-Vコンテナを実行した場合、特別なSKU番号ではなく「DatacenterServerEdition(8)」を返します。これは実に興味深い結果です。

 ところで、Windows Serverでも2017年の秋から、年に2度の機能更新を提供する「Semi-Annual Channel」がスタートする予定です。現在のWindows Server 2016は「Long Term Servicing Channel:LTSC」(Long Term Servicing Branch:LTSBから名称変更)として従来のサポートポリシーに基づいてサポートされます。Semi-Annual Channelの対象はServer CoreインストールとNano Serverで、Nano ServerはWindowsコンテナのためのベースOSイメージとしてのみの提供になります。LTSCの対象はデスクトップエクスペリエンスとServer Coreインストールです。Semi-Annual Channelがスタートすると、Windows Serverのバージョンやエディション、インストールオプションの識別は、ますますややこしくなりそうです。

●筆者紹介
○山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門-完全版』(日経BP社)。

最終更新:8/2(水) 7:55
@IT