Frage Identifizieren des Windows 2012 Server-Kerns


Ich möchte feststellen, ob ein 2012-Server als Core-Installation mit WMI eingerichtet wurde. Eine frühere Frage scheint darauf hinzuweisen, dass ich das bekommen kann OperatingSystemSKU von Win32_OperatingSystem. Meine Windows 2012 Core-Systeme melden eine OperatingSystemSKU von 7. Die Artikel Die andere Frage scheint ein PRODUCT_STANDARD_SERVER zu sein, und wenn ich eine Kerninstallation hatte, sollte ich erwarten, stattdessen einen Wert von 0x0000000D für PRODUCT_STANDARD_SERVER_CORE zu sehen.

Was vermisse ich hier. Ich möchte schließlich eine Richtlinie erstellen und das Targeting auf Elementebene verwenden, um diese Richtlinie nur auf Windows 2012 Server Core-Installationen anzuwenden.

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

18
2017-08-06 19:25


Ursprung


Als leichte Ablenkung zu deiner Frage ... Wie würde man Server Core definieren? Ich habe gelesen, dass der Serverkern genauso ist, wenn ein oder zwei weniger Features installiert sind (GUI). Könnten Sie stattdessen nicht danach fragen? - john
Wenn Sie eine Antwort darauf geben können, wie Sie erkennen, dass diese Funktion über WMI installiert ist, würde ich sie aktualisieren und testen. Jede Antwort, die verwendet werden kann, um den Serverkern mit WMI zu identifizieren, wäre meiner Meinung nach hilfreich. - Zoredache
Versuchen Sie, WMI auf den Remote-Computern zu verwenden. Get-WMIObject Win32_OptionalFeature | Select Name, InstallState und filtern, ob auf dem Server die Server-GUI-Bits installiert sind oder nicht. - Ryan Ries


Antworten:


In der PowerShell:

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

kehrt zurück 1 auf einem vollen Server und 2 auf einer Serverkerninstallation.

Bearbeiten:

Während meine obige Antwort richtig ist, gibt es zwei Probleme damit:

  1. Wenn Sie diesen Befehl auf einer Workstation verwenden, gibt er nichts zurück, daher müssen Sie eine zusätzliche Überprüfung hinzufügen.

  2. Es ist langsam, als ich es versuchte, dauerte es zwischen 600 und 3500     Millisekunden.

Der pragmatischere Ansatz besteht also darin, einfach nach der Existenz einer bestimmten Datei zu suchen:

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

Dies kehrt zurück $false für eine Server Core-Installation und $true für alle anderen und es braucht eine Millisekunde ausführen.


24
2017-08-06 19:41



Große Antwort - Ich mag besonders die Workaround, die Sie mit allen Erklärungen anbieten;) Perfekt. - TomTom


Lustig, der MSDN-Artikel, den Sie verlinkt haben, enthielt die Antwort:

PRODUCT _ * _ SERVER_CORE-Werte werden in Windows Server 2012 nicht zurückgegeben.

Dies liegt daran, dass Server 2012 zwischen "Server Core" - und "Full" -Installation einfach durch Hinzufügen oder Entfernen der entsprechenden Funktionen frei konvertiert werden kann.

Sie sollten prüfen, ob diese Funktionen vorhanden oder nicht vorhanden sind (z. B. Server-Gui-Mgmt-Infra, Server-Gui-Shell, Desktop-Experience).


6
2017-08-06 19:33





Da die GUI nur ein Feature ist, können Sie die Liste der installierten Features abfragen

Das hier in Powershell auf einem Server zu testen, funktionierte hier gut genug:

Dump eine Liste von Funktionen, um den Namen zu greifen

Get-WmiObject Win32_OptionalFeature > features.txt

Die Suche nach dem Text von features.txt sagt mir, dass die Funktion "Server-Gui-Mgmt" heißt (andere Funktionen können auch installiert werden, wie Michael in seiner Antwort bemerkt, damit Sie auch diese testen können), und wir können nachsehen wenn das vorhanden ist

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

enter image description here


5
2017-08-06 19:47





Ich vermute, dass, da sie im Jahr 2012 im Wesentlichen die gleichen sind und nur einige optionale Funktionen zur Verfügung stehen, um sie voneinander zu unterscheiden, Sie stattdessen die Funktionen abfragen könnten.

Dieser Beitrag ist eine Referenz für die Win32_OptionalFeature-Klasse, mit der Sie die Features abfragen können. Die optionalen Funktionen sind definiert als Server-Gui-Mgmt-Infra, Server-Gui-Shell und Desktop-Experience Dieser Beitrag.

Sie können die 3 von ihnen abfragen und Boolesche AND- und NOT-Logik verwenden, um Server auszuwählen, auf denen keine dieser Funktionen installiert ist.


2
2017-08-06 19:43





Ich würde Win32_ServerFeature verwenden, es ist eine viel kleinere Klasse und enthält nur die auf dem Server installierten Rollen. Abfragen, die Win32_Server Feature verwenden, sollten viel schneller zurückgeben.

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

2
2017-11-02 15:16





Einige Erläuterungen zu den Antworten für lokale und Remote-Szenarien als Performance wurden diskutiert. Der Fragesteller fragte WMI, und sein Beispiel verwendete PowerShell zum Aufrufen von WMI. Die Verwendung von WMI direkt aus nicht verwaltetem Code ist ebenfalls schneller.

Beachten Sie, dass die Ansätze effektiv für Server 2012 und Server 2012 R2 gelten und möglicherweise nicht für zukünftige Versionen gelten.

Einige Kompromisse abhängig von Ihrem Szenario ... In den meisten Fällen wird Win32_ServerFeature als allgemeine Lösung oder die lokale Dateiprüfung in einer Prise bevorzugt.

  • Lokale Dateiprüfung: schnell und schmutzig. Sehr wenige bewegliche Teile.
  • MSFT_ServerManagerDeploymentTasks: Der zugrunde liegende WMI-Provider, der von Win32_ServerFeature und Get-WindowsFeature verwendet wird. Es verwendet einen lokalen Registrierungscache und kehrt normalerweise sehr schnell zurück, sofern seit der letzten Abfrage keine Konfigurationsänderungen vorgenommen wurden. Im Falle des Cache-Fehltreffers ist es ungefähr dasselbe wie Win32_OptionalFeature. Dies ist eine sehr gute Schnittstelle, wenn Sie viele Maschinen in einem schnellen Netzwerk abfragen und viele Details über Beziehungen von Komponenten und deren Status benötigen - aber für den normalen Gebrauch ist es ein Problem. Verwenden Sie stattdessen Win32_ServerFeature.
  • Win32_ServerFeature: Im Allgemeinen die beste Wahl für lokale oder Remote-Abfragen, aber nicht so schnell wie die lokale Dateiprüfung. Gibt nur installierte Funktionen zurück und stellt wenig Netzwerkverkehr bereit.
  • Get-WindowsFeature: Sehr einfach zu verwenden, vorausgesetzt, Sie verwenden PowerShell bereits als Teil Ihres Aufrufpfads. Wenn Sie ein Remote-Ziel anrufen, werden mehr als 400K über das Netzwerk verteilt. Dies ist ein Overkill, wenn Sie nur wissen möchten, ob ein bestimmtes Feature installiert ist.
  • Win32_OptionalFeature / Get-WindowsOptionalFeature: Dies fragt jedes Mal DISM auf dem Ziel ab, was ziemlich schwer sein kann.

Dies umfasst Online-lokale und Remote-Szenarien. Einige der oben genannten Aspekte zielen auch auf ein Offline-Bild ab.


2
2017-09-14 00:40





Ich dachte nur, dass ich mit einem WMI-Filter für diese Lösung klarkomme, sodass Sie Gruppenrichtlinienobjekte auf Core 2012 + -Systeme anwenden können:

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

Um dies in der Befehlszeile zu testen:

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

Ich bin über diesen Thread gestolpert, als ich versuchte, einen Weg zu finden, WMI-Filter für Core 2012 Server zu erstellen, und aus irgendeinem Grund kam ich nicht auf die Idee, WMI Win32_OptionalFeature zu überprüfen (oder tatsächlich, dass ein solcher Pfad existiert). Hoffe das hilft jemand anderem.


1
2017-11-25 14:39