ระบุเซิร์ฟเวอร์หลักของ Windows 2012


18

ฉันต้องการตรวจสอบว่าเซิร์ฟเวอร์ 2012 ได้รับการติดตั้งแบบ Core หรือไม่โดยใช้ WMI คำถามที่ก่อนหน้านี้จะชี้ให้เห็นว่าฉันจะได้รับOperatingSystemSKU จาก Win32_OperatingSystem ระบบหลักของ Windows 2012 ของฉันกำลังรายงาน OperatingSystemSKU อยู่ที่ 7 บทความจากคำถามอื่น ๆ ดูเหมือนจะบ่งบอกว่าเป็น PRODUCT_STANDARD_SERVER และหากมีการติดตั้งหลักฉันควรคาดหวังให้เห็นค่า 0x0000000D แทน PRODUCT_STANDARD_SERVER_CORE

ฉันคิดถึงอะไรที่นี่ ในที่สุดฉันก็ต้องการสร้างนโยบายและใช้การกำหนดเป้าหมายระดับรายการเพื่อใช้นโยบายนั้นกับการติดตั้ง 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

เป็นการเบี่ยงเบนคำถามของคุณเล็กน้อย ... ใครจะกำหนดเซิร์ฟเวอร์หลักได้อย่างไร ฉันอ่านว่าเซิร์ฟเวอร์หลักนั้นเหมือนกันโดยมีฟีเจอร์ติดตั้งน้อยหนึ่งหรือสองอย่าง (the GUI) คุณไม่สามารถค้นหาสิ่งนั้นแทนได้หรือไม่
จอห์น

หากคุณสามารถให้คำตอบเกี่ยวกับวิธีการตรวจสอบคุณสมบัติที่ติดตั้งผ่าน WMI แล้วฉันจะ upvote และทดสอบออก คำตอบใด ๆ ที่สามารถใช้เพื่อระบุเซิร์ฟเวอร์หลักด้วย WMI จะเป็นประโยชน์ในความคิดของฉัน
Zoredache

ลองใช้ WMI บนเครื่องระยะไกล Get-WMIObject Win32_OptionalFeature | Select Name, InstallStateและกรองว่าเซิร์ฟเวอร์มีบิต GUI ของเซิร์ฟเวอร์ติดตั้งหรือไม่
Ryan Ries

คำตอบ:


24

ใน 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สำหรับผู้อื่นทั้งหมดและใช้เวลาหนึ่งมิลลิวินาทีในการดำเนินการ


คำตอบที่ดี - ฉันชอบวิธีแก้ปัญหาที่คุณเสนอพร้อมคำอธิบายทั้งหมด;) สมบูรณ์แบบ
TomTom

6

ตลกบทความ MSDN ที่คุณเชื่อมโยงมีคำตอบ:

ค่า PRODUCT _ * _ SERVER_CORE จะไม่ถูกส่งคืนใน Windows Server 2012

นี่เป็นเพราะ Server 2012 สามารถแปลงได้อย่างอิสระระหว่างการติดตั้ง "Server Core" และ "เต็ม" เพียงแค่เพิ่มหรือลบคุณสมบัติที่เหมาะสม

คุณจะต้องการตรวจสอบว่ามีหรือไม่มีฟีเจอร์เหล่านั้น (เช่น Server-Gui-Mgmt-Infra, Server-Gui-Shell, Desktop-Experience)


5

เนื่องจาก 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'"

ป้อนคำอธิบายรูปภาพที่นี่


2

ฉันสงสัยว่าเนื่องจากพวกเขามีคุณสมบัติเหมือนกันในปี 2555 โดยมีคุณสมบัติทางเลือกเพียงไม่กี่อย่างที่แยกพวกเขาออกคุณจึงสามารถค้นหาคุณสมบัติแทนได้

บทความนี้เป็นการอ้างอิงสำหรับคลา Win32_OptionalFeature ซึ่งจะช่วยให้คุณสามารถสอบถามคุณลักษณะ คุณสมบัติตัวเลือกจะถูกกำหนดเป็นเซิร์ฟเวอร์ Gui-บุคคล-Infra, เซิร์ฟเวอร์ Gui เชลล์และเดสก์ท็ประสบการณ์ที่ระบุไว้ในบทความนี้

คุณสามารถสอบถามทั้ง 3 ข้อและใช้ตรรกะบูลีน AND และไม่ใช่เพื่อเลือกเซิร์ฟเวอร์ที่ไม่มีคุณสมบัติเหล่านี้ติดตั้ง


2

ฉันจะใช้ Win32_ServerFeature มันเป็นคลาสที่เล็กกว่ามากและมีเพียงบทบาทที่ติดตั้งบนเซิร์ฟเวอร์ แบบสอบถามที่ใช้คุณสมบัติ Win32_Server ควรกลับมาเร็วกว่ามาก

Get-WmiObject -Query "Select * FROM Win32_ServerFeature WHERE Name = 'Server Graphical Shell'" 

2

การชี้แจงบางอย่างเกี่ยวกับคำตอบสำหรับสถานการณ์ในพื้นที่และระยะไกลเนื่องจากมีการพูดถึงประสิทธิภาพ ผู้ถามถาม WMI และตัวอย่างของเขาใช้ PowerShell เพื่อเรียกใช้ WMI การใช้ WMI โดยตรงจากรหัสที่ไม่มีการจัดการก็รวดเร็วขึ้นเช่นกัน

โปรดทราบว่าวิธีการใช้นั้นมีผลบังคับใช้กับ Server 2012 และ Server 2012 R2 และอาจไม่มีผลกับการวางจำหน่ายในอนาคต

การค้าบางอย่างไม่ชอบขึ้นอยู่กับสถานการณ์ของคุณ ... สำหรับกรณีส่วนใหญ่ Win32_ServerFeature เป็นที่ต้องการเป็นวิธีการแก้ปัญหาทั่วไปหรือการตรวจสอบไฟล์ในท้องถิ่นในหยิก

  • การตรวจสอบไฟล์ในเครื่อง: รวดเร็วและสกปรก ชิ้นส่วนที่เคลื่อนไหวน้อยมาก
  • MSFT_ServerManagerDeploymentTasks: ผู้ให้บริการ WMI พื้นฐานที่ใช้โดย Win32_ServerFeature และ Get-WindowsFeature มันใช้แคชรีจิสตรีและโดยปกติจะส่งคืนอย่างรวดเร็วเว้นแต่จะมีการเปลี่ยนแปลงการกำหนดค่าตั้งแต่การสืบค้นครั้งล่าสุด ในกรณีที่พลาดแคชมันจะเหมือนกับ Win32_OptionalFeature นี่เป็นอินเทอร์เฟซที่ดีมากถ้าคุณกำลังสอบถามเครื่องจักรจำนวนมากในเครือข่ายที่รวดเร็วและต้องการรายละเอียดมากมายเกี่ยวกับความสัมพันธ์ของส่วนประกอบและสถานะ - แต่สำหรับการใช้งานปกติมันเป็นเรื่องเจ็บปวด ใช้ Win32_ServerFeature แทน
  • Win32_ServerFeature: โดยทั่วไปแล้วเป็นตัวเลือกที่ดีที่สุดสำหรับการสอบถามแบบโลคัลหรือแบบรีโมต แต่ไม่เร็วเท่าการตรวจสอบไฟล์โลคอล ส่งคืนเฉพาะฟีเจอร์ที่ติดตั้งและทำให้ปริมาณการใช้งานบนเครือข่ายลดลง
  • Get-WindowsFeature: ใช้งานง่ายมากสมมติว่าคุณใช้ PowerShell เป็นส่วนหนึ่งของเส้นทางการโทรแล้ว เมื่อโทรไปยังเป้าหมายระยะไกลสิ่งนี้จะเพิ่มขึ้นเป็น 400K ทั่วทั้งเครือข่ายซึ่งเกินขีดเมื่อคุณต้องการทราบว่ามีการติดตั้งคุณสมบัติเฉพาะไว้หรือไม่
  • Win32_OptionalFeature / Get-WindowsOptionalFeature: แบบสอบถามนี้ DISM บนเป้าหมายทุกครั้งซึ่งอาจค่อนข้างหนัก

ที่ครอบคลุมสถานการณ์ในท้องถิ่นและระยะไกลออนไลน์ รายการด้านบนบางส่วนจะกำหนดเป้าหมายเป็นรูปภาพออฟไลน์


1

ฉันแค่คิดว่าฉันจะพูดสอดกับตัวกรอง WMI สำหรับโซลูชันนี้ดังนั้นคุณสามารถใช้ GPOs กับระบบ 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"

ฉันสะดุดในหัวข้อนี้เมื่อพยายามหาวิธีสร้างตัวกรอง WMI สำหรับเซิร์ฟเวอร์ Core 2012 และด้วยเหตุผลบางอย่างมันไม่ได้เกิดขึ้นกับฉันที่จะมี WMI ตรวจสอบ Win32_OptionalFeature (หรือแน่นอนว่าเส้นทางดังกล่าวมีอยู่) หวังว่านี่จะช่วยคนอื่นได้


0

ใน Windows Server 2012 R2 ฉันใช้สิ่งต่อไปนี้ประสิทธิภาพดี แต่ก็ยังค่อนข้างชัดเจน

$gui = (Get-WindowsFeature -Name 'Server-Gui-Shell').Installed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.