AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 529124
Accepted
Zoredache
Zoredache
Asked: 2013-08-07 11:25:51 +0800 CST2013-08-07 11:25:51 +0800 CST 2013-08-07 11:25:51 +0800 CST

识别 Windows 2012 Server 内核

  • 772

我想检测是否已使用 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
windows-server-2012
  • 8 8 个回答
  • 11921 Views

8 个回答

  • Voted
  1. Best Answer
    Peter Hahndorf
    2013-08-07T11:41:19+08:002013-08-07T11:41:19+08:00

    在 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所有其他安装,这将返回,并且执行需要一毫秒。

    • 24
  2. Michael Hampton
    2013-08-07T11:33:44+08:002013-08-07T11:33:44+08:00

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

    PRODUCT_*_SERVER_CORE 值不会在 Windows Server 2012 中返回。

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

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

    • 6
  3. Rob Moir
    2013-08-07T11:47:05+08:002013-08-07T11:47:05+08:00

    由于 GUI 只是一个功能,您可以查询已安装功能的列表

    只需在服务器上的 powershell 中测试它就足够了:

    转储功能列表以获取名称

    Get-WmiObject Win32_OptionalFeature > features.txt
    

    搜索 features.txt 的文本告诉我该功能被命名为“Server-Gui-Mgmt”(其他功能也可能已安装,正如迈克尔在他的回答中指出的那样,因此您也可以测试这些功能),我们可以搜索查看如果那存在

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

    在此处输入图像描述

    • 5
  4. Icolan
    2015-11-03T07:16:28+08:002015-11-03T07:16:28+08:00

    我会使用 Win32_ServerFeature,它是一个小得多的类,并且只包含安装在服务器上的角色。使用 Win32_Server 功能的查询应该更快返回。

    Get-WmiObject -Query "Select * FROM Win32_ServerFeature WHERE Name = 'Server Graphical Shell'" 
    
    • 3
  5. john
    2013-08-07T11:43:03+08:002013-08-07T11:43:03+08:00

    我怀疑由于它们在 2012 年基本相同,只有一些可选功能可以将它们分开,因此您可以查询这些功能。

    本文是 Win32_OptionalFeature 类的参考,可让您查询功能。如本文所述,可选功能定义为 Server-Gui-Mgmt-Infra、Server-Gui-Shell 和 Desktop-Experience 。

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

    • 2
  6. Matthew Wetmore
    2016-09-14T16:40:10+08:002016-09-14T16:40:10+08:00

    在讨论性能时,对本地和远程场景的答案进行了一些澄清。提问者询问 WMI,他的示例使用 PowerShell 调用 WMI。直接从非托管代码中使用 WMI 也更快。

    请注意,这些方法有效地适用于 Server 2012 和 Server 2012 R2,并且可能不适用于未来的版本。

    根据您的方案进行一些权衡...对于大多数情况,首选 Win32_ServerFeature 作为通用解决方案,或者在紧要关头检查本地文件。

    • 本地文件检查:快速而肮脏。运动部件很少。
    • MSFT_ServerManagerDeploymentTasks:Win32_ServerFeature 和 Get-WindowsFeature 使用的基础 WMI 提供程序。它使用本地注册表缓存,并且通常会很快返回,除非自上次查询以来发生配置更改。在缓存未命中的情况下,它与 Win32_OptionalFeature 大致相同。如果您在快速网络上查询大量机器并且需要有关组件关系及其状态的大量详细信息,这是一个非常好的界面 - 但对于正常使用来说,这是一种痛苦。请改用 Win32_ServerFeature。
    • Win32_ServerFeature:通常是本地或远程查询的最佳选择,但不如本地文件检查快。仅返回已安装的功能,并在网络上放置很少的流量。
    • Get-WindowsFeature:使用起来非常简单,假设您已经将 PowerShell 作为调用路径的一部分。当调用远程目标时,这会在网络上产生超过 400K 的数据,当您只想知道是否安装了特定功能时,这将是多余的。
    • Win32_OptionalFeature / Get-WindowsOptionalFeature:每次都会查询目标上的 DISM,这可能非常繁重。

    这涵盖了在线本地和远程场景。上面的一些也将针对离线图像。

    • 2
  7. Tohuw
    2014-11-26T06:39:40+08:002014-11-26T06:39:40+08:00

    我只是想我会为这个解决方案添加一个 WMI 过滤器,因此您可以将 GPO 应用于 Core 2012+ 系统:

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

    要在命令行上对此进行测试:

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

    当我试图找到一种为 Core 2012 服务器创建 WMI 过滤器的方法时,我偶然发现了这个线程,并且由于某种原因,我没有想到让 WMI 检查 Win32_OptionalFeature(或者确实存在这样的路径)。希望这对其他人有帮助。

    • 1
  8. Jules Clements
    2016-06-09T13:15:52+08:002016-06-09T13:15:52+08:00

    在 Windows Server 2012 R2 上,我使用以下,性能很好,同时仍然非常明确。

    $gui = (Get-WindowsFeature -Name 'Server-Gui-Shell').Installed
    
    • 0

相关问题

  • 一个 Active Directory,多个远程桌面服务(Server 2012 解决方案)

  • 在虚拟处理器上启用硬件辅助虚拟化?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve