识别 Windows 2012 Server 核心

识别 Windows 2012 Server 核心

我想使用 WMI 检测 2012 服务器是否已设置为核心安装。之前的一个问题似乎表明我可以获得来自 Win32_OperatingSystem 的 OperatingSystemSKU。我的 Windows 2012 Core 系统报告的 OperatingSystemSKU 为 7。文章从另一个问题来看似乎表明是PRODUCT_STANDARD_SERVER,并且如果安装了核心,我应该看到PRODUCT_STANDARD_SERVER_CORE的值为0x0000000D。

我在这里遗漏了什么。我最终想创建一个策略并使用项目级别定位将该策略仅应用于 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

在 PowerShell 中:

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

返回1在完整的服务器上2在服务器核心安装上。

编辑:

虽然我的上述回答是正确的,但存在两个问题:

  1. 在工作站上使用此命令时,它不会返回任何内容,因此您必须为此添加额外的检查。

  2. 它很慢,当我尝试它时,花了 600 到 3500 毫秒。

因此,更务实的方法是仅检查某个文件是否存在:

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

这将返回$false服务器核心安装和$true所有其他安装,并且需要一毫秒执行。

答案2

有趣的是,您链接的 MSDN 文章包含答案:

Windows Server 2012 中未返回 PRODUCT_*_SERVER_CORE 值。

这是因为,只需添加或删除相应的功能,Server 2012 便可在“服务器核心”和“完整”安装之间自由转换。

您将需要检查这些功能是否存在(例如 Server-Gui-Mgmt-Infra、Server-Gui-Shell、Desktop-Experience)。

答案3

由于 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'"

在此处输入图片描述

答案4

我怀疑,由于它们在 2012 年本质上是相同的,只有几个可选功能可以将它们区分开来,因此您可以查询这些功能。

本文是 Win32_OptionalFeature 类的引用,它允许您查询功能。可选功能定义为 Server-Gui-Mgmt-Infra、Server-Gui-Shell 和 Desktop-Experience,如中所述本文

您可以查询这三个并使用布尔 AND 和 NOT 逻辑来选择未安装这些功能的服务器。

相关内容