我想使用 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在服务器核心安装上。
编辑:
虽然我的上述回答是正确的,但存在两个问题:
在工作站上使用此命令时,它不会返回任何内容,因此您必须为此添加额外的检查。
它很慢,当我尝试它时,花了 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'"