Tags: Windows Server 2016, WMI, Inventarisierung, PowerShell, Registry, Nano Server
Windows Server bietet in der Version 2016 die Installationsoptionen Desktop Experience, Core und Nano. Nachdem gerade Nano Server einigen Einschränkungen unterliegt, kann es etwa vor der Installation von Features, Software oder bei der Ausführung von Scripts wichtig sein, die installierte Variante abzufragen.
Windows Server 2016 führte als neue Option den Nano Server ein und gab gleichzeitig das Minimal Server Interface auf, das Microsoft mit Server 2012 brachte. Während man unter Server 2012 R2 noch zwischen den drei Installationsoptionen umsteigen konnte, ist das in der Version 2016 nicht mehr möglich (siehe: Windows Server 2016: Nano as a Service, kein Wechsel zwischen GUI und Core).
Vielzahl an SKUs
Laufen im Netzwerk mehrere Versionen von Windows Server, so macht dieser Wechsel die Lage relativ unübersichtlich. Das zeigt sich besonders bei der Abfrage der WMI-Klasse Win32_OperatingSystem, deren Eigenschaft OperatingSystemSKU die gewünschte Auskunft geben sollte.
Wie diese Tabelle auf MSDN belegt, ist über die Jahre ein regelrechter SKU-Wildwuchs entstanden. Die Übersicht auf MSDN weist mittlerweile 33 Kombinationen aus Version, Edition und Installationsoption aus.
Wenn man nur die wichtigsten Varianten berücksichtigt, dann dürfte folgendes Script ausreichen. Bei Bedarf kann man es noch um weitere Einträge in der Liste ergänzen.
Die function Get-WsVersion gibt zuerst den Titel für die installierte Server-Version aus (Caption) und übersetzt anschließend den numerischen Wert von OperatingSystemSKU in die Langdarstellung aus der MSDN-Tabelle. Ruft man sie mit der leeren Zeichenkette auf, dann wird sie auf den lokalen Rechner angewandt.
In einigen Fällen funktioniert diese Zuordnung nicht verlässlich. So gibt Windows Server 2012 Standard als Core-Installation den Wert 7 zurück, der eigentlich der Desktop Experience vorbehalten sein sollte.
Installationsoption aus Registry auslesen
Muss sich ein Script darauf verlassen, dass es beispielsweise nicht auf einem Nano Server läuft, dann sollte man lieber auf die Information bauen, die man aus der Registrierdatenbank entnehmen kann. Dazu ruft man
Get-Item "HKLM:\software\microsoft\Windows NT\CurrentVersion\Server\ServerLevels"
auf.
Für den Vergleich, von dem die Ausführung eines Scripts abhängen soll, sind die jeweiligen Eigenschaften dieses Schlüssels erforderlich. Diese sind
- Server-Gui-Mgmt
- Server-Gui-Shell
- ServerCore
- ServerCoreExtended
- NanoServer
Will man also ermitteln, ob ein Script auf einem Nano Server läuft, könnte man das so feststellen:
Wenn das Script auch auf einer Workstation ausgeführt wird, dann sollte man den Schlüssel vorher mit Test-Path abfragen, um eine Fehlermeldung zu vermeiden:
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Windows Server 2016: schlanker Nano Server als Alternative zu Server Core
- BitLocker aktivieren mit manage-bde, PowerShell oder WMI
- Programme (remote) mit PowerShell deinstallieren
- Project Honolulu 1711: Integration von PowerShell und RDP, Management von Windows 10
- Rollen und Features in Container-Images installieren
Weitere Links