Zor*_*che 20 wmi windows-server-core windows-server-2012
我想检测是否已使用 WMI 将 2012 服务器设置为 Core 安装。一个较早的问题似乎表明我可以从 Win32_OperatingSystem获取OperatingSystemSKU。我的 Windows 2012 核心系统报告的 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
Run Code Online (Sandbox Code Playgroud)
Pet*_*orf 24
在 PowerShell 中:
Get-WMIObject Win32_OptionalFeature | where Name -eq 'Server-Gui-Shell' | Select InstallState
Run Code Online (Sandbox Code Playgroud)
在完整服务器上返回1,在服务器核心安装上返回2。
编辑:
虽然我上面的回答是正确的,但它有两个问题:
在工作站上使用此命令时,它不会返回任何内容,因此您必须为此添加额外的检查。
它很慢,当我尝试时,它花了 600 到 3500 毫秒。
所以更实用的方法是只检查某个文件是否存在:
(Test-Path "$env:windir\explorer.exe")
Run Code Online (Sandbox Code Playgroud)
这将返回$false
服务器核心安装和$true
所有其他安装,执行需要一毫秒。
有趣的是,您链接的那篇 MSDN 文章包含了答案:
PRODUCT_*_SERVER_CORE 值不会在 Windows Server 2012 中返回。
这是因为 Server 2012 可以通过添加或删除适当的功能在“服务器核心”和“完整”安装之间自由转换。
您需要检查这些功能是否存在(例如 Server-Gui-Mgmt-Infra、Server-Gui-Shell、Desktop-Experience)。
由于 GUI 只是一个功能,您可以查询已安装的功能列表
只需在此处的服务器上的 powershell 中对此进行测试就足够了:
转储功能列表以获取名称
Get-WmiObject Win32_OptionalFeature > features.txt
Run Code Online (Sandbox Code Playgroud)
搜索 features.txt 的文本告诉我该功能名为“Server-Gui-Mgmt”(Michael 在他的回答中指出,也可能安装了其他功能,因此您也可以测试这些功能),我们可以搜索以查看如果存在
Get-WmiObject -query "select * from Win32_OptionalFeature where name = 'Server-Gui'"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11244 次 |
最近记录: |