Windows 2012 Serverコアを特定する


18

2012サーバーがWMIを使用してコアインストールとしてセットアップされているかどうかを検出したい。以前の質問は、Win32_OperatingSystemからOperatingSystemSKUを取得できることを示しているようです。私のWindows 2012コアシステムは7のOperatingSystemSKUを報告しています。他の質問の記事はPRODUCT_STANDARD_SERVERを示しているように見えます。

ここに何が欠けていますか。最終的にはポリシーを作成し、アイテムレベルのターゲティングを使用して、そのポリシーをWindows 2012 Server Coreインストールにのみ適用したいと思います。

PS C:\Users\zoredache\Documents> gwmi -Query "select OPeratingSystemSKU,Version,ProductType from Win32_OperatingSystem"

__GENUS            : 2
__CLASS            : Win32_OperatingSystem
__SUPERCLASS       :
__DYNASTY          :
__RELPATH          : Win32_OperatingSystem=@
__PROPERTY_COUNT   : 3
__DERIVATION       : {}
__SERVER           :
__NAMESPACE        :
__PATH             :
OperatingSystemSKU : 7
ProductType        : 2
Version            : 6.2.9200

あなたの質問へのわずかな偏向として...サーバーコアをどのように定義しますか?サーバーコアは、インストールされている機能が1つまたは2つ少ない(GUI)だけで同じであると読みました。代わりにクエリを実行できませんか?
ジョン

その機能がWMIを介してインストールされていることを検出する方法に関する回答を提供できる場合は、それを投票してテストします。私の意見では、WMIを使用してサーバーコアを識別するために使用できる回答があれば役立つでしょう。
ゾレダチェ

リモートマシンでWMIを使用してみてください。Get-WMIObject Win32_OptionalFeature | Select Name, InstallStateサーバーにサーバーGUIビットがインストールされているかどうかをフィルターします。
ライアンリース

回答:


24

PowerShellの場合:

Get-WMIObject Win32_OptionalFeature | where Name -eq 'Server-Gui-Shell' | Select InstallState

フルサーバーでは1を返し、サーバーコアインストールでは2を返します。

編集:

上記の私の答えは正しいですが、それには2つの問題があります。

  1. ワークステーションでこのコマンドを使用すると、何も返されないため、このための追加のチェックを追加する必要があります。

  2. 遅いですが、試してみると600〜3500ミリ秒かかりました。

したがって、より実用的なアプローチは、特定のファイルの存在を確認することです。

(Test-Path "$env:windir\explorer.exe")

これは$false、Server Coreインストールおよび$trueその他すべてのインストールに対して返され、実行に1ミリ秒かかります


素晴らしい答え-私は特にあなたがすべての説明で提供する回避策が好きです;)完璧。
トムトム

6

面白いことに、リンクしたMSDNの記事には答えが含まれていました。

PRODUCT _ * _ SERVER_CORE値は、Windows Server 2012では返されません。

これは、適切な機能を追加または削除するだけで、Server 2012を「Server Core」インストールと「full」インストールの間で自由に変換できるためです。

これらの機能(Server-Gui-Mgmt-Infra、Server-Gui-Shell、Desktop-Experienceなど)の有無を確認する必要があります。


5

GUIは単なる機能であるため、インストールされている機能のリストを照会できます。

ここのサーバーでPowerShellでこれをテストするだけで十分に機能しました:

機能のリストをダンプして名前を取得します

Get-WmiObject Win32_OptionalFeature > features.txt

features.txtのテキストを検索すると、機能の名前が「Server-Gui-Mgmt」であることがわかります(Michaelが回答でメモしているように、他の機能もインストールされる可能性があるため、テストすることもできます)。それが存在する場合

Get-WmiObject -query "select * from Win32_OptionalFeature where name = 'Server-Gui'"

ここに画像の説明を入力してください


2

2012年も基本的に同じであり、いくつかのオプション機能を備えているだけなので、それらの機能を照会することができます。

この記事は、機能を照会できるWin32_OptionalFeatureクラスのリファレンスです。オプションの機能は、この記事で概説されているように、Server-Gui-Mgmt-Infra、Server-Gui-Shell、およびDesktop-Experienceとして定義されています。

これらの3つを照会し、ブールANDおよびNOTロジックを使用して、これらの機能がインストールされていないサーバーを選択できます。


2

Win32_ServerFeatureを使用します。これははるかに小さいクラスで、サーバーにインストールされたロールのみが含まれています。Win32_Server機能を使用したクエリは、より迅速に返されるはずです。

Get-WmiObject -Query "Select * FROM Win32_ServerFeature WHERE Name = 'Server Graphical Shell'" 

2

パフォーマンスが議論されたときのローカルおよびリモートシナリオの答えに関するいくつかの明確化。質問者はWMIを尋ね、彼の例ではPowerShellを使用してWMIを呼び出しました。アンマネージコードから直接WMIを使用する方が高速です。

これらのアプローチはServer 2012およびServer 2012 R2に効果的に適用され、将来のリリースには適用されない可能性があることに注意してください。

シナリオに応じていくつかのトレードオフがあります...ほとんどの場合、Win32_ServerFeatureが一般的なソリューションとして、またはローカルファイルのチェックが優先されます。

  • ローカルファイルチェック:迅速かつダーティ。可動部品はほとんどありません。
  • MSFT_ServerManagerDeploymentTasks:Win32_ServerFeatureおよびGet-WindowsFeatureで使用される基になるWMIプロバイダー。ローカルレジストリキャッシュを使用し、最後のクエリ以降に構成の変更がない限り、通常は非常に迅速に戻ります。キャッシュミスが発生した場合、Win32_OptionalFeatureとほぼ同じです。これは、高速ネットワークで多数のマシンを照会し、コンポーネントの関係とそのステータスに関する多くの詳細が必要な場合に非常に優れたインターフェイスですが、通常の使用では苦痛です。代わりにWin32_ServerFeatureを使用してください。
  • Win32_ServerFeature:通常、ローカルまたはリモートクエリに最適な万能の選択肢ですが、ローカルファイルチェックほど高速ではありません。インストールされている機能のみを返し、ネットワークにほとんどトラフィックを入れません。
  • Get-WindowsFeature:呼び出しパスの一部として既にPowerShellを使用している場合、非常に簡単に使用できます。リモートターゲットに対して呼び出す場合、特定の機能がインストールされているかどうかだけを知りたい場合は、ネットワーク全体で最大400Kが過剰になります。
  • Win32_OptionalFeature / Get-WindowsOptionalFeature:これは毎回ターゲットでDISMを照会しますが、これはかなり重い場合があります。

オンラインのローカルおよびリモートのシナリオを対象としています。上記の一部は、オフラインイメージも対象とします。


1

このソリューション用のWMIフィルターを使いこなそうと思ったので、GPOをCore 2012+システムに適用できます。

SELECT * FROM Win32_OptionalFeature WHERE Caption = "Microsoft-Windows-Server-Gui-Shell-Package-DisplayName" AND InstallState = "2"

これをコマンドラインでテストするには:

WMIC PATH Win32_OptionalFeature WHERE "Caption = 'Microsoft-Windows-Server-Gui-Shell-Package-DisplayName' AND InstallState = 2"

Core 2012サーバー用のWMIフィルターを作成する方法を見つけようとすると、このスレッドにつまずきました。何らかの理由で、WMIがWin32_OptionalFeatureをチェックすることはありませんでした(実際、そのようなパスが存在する)。これが他の人の助けになることを願っています。


0

Windows Server 2012 R2では、次のものを使用していますが、パフォーマンスは良好でありながら、非常に明確です。

$gui = (Get-WindowsFeature -Name 'Server-Gui-Shell').Installed
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.