Xác định lõi máy chủ Windows 2012


18

Tôi muốn phát hiện nếu một máy chủ 2012 đã được thiết lập dưới dạng cài đặt Core bằng WMI. Một câu hỏi trước đó, dường như chỉ ra rằng tôi có thể nhận được OperationsSystemSKU từ Win32_OperatingSystem . Các hệ thống Windows 2012 Core của tôi đang báo cáo Hệ điều hành hệ thống là 7. Bài viết từ câu hỏi khác dường như chỉ ra là SẢN PHẨM BANDNG CÁCH MẠNG, và nếu có cài đặt lõi, tôi sẽ thấy giá trị 0x0000000D thay vì cho Product_STANDARD_SERVER_CORE.

Tôi đang thiếu gì ở đây. Cuối cùng tôi muốn tạo một chính sách và sử dụng nhắm mục tiêu cấp độ mục để chỉ áp dụng chính sách đó cho các cài đặt 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

Như một chút sai lệch cho câu hỏi của bạn ... Làm thế nào một người sẽ xác định lõi máy chủ? Tôi đọc rằng lõi máy chủ giống nhau với một hoặc hai tính năng ít hơn được cài đặt (GUI). Bạn có thể không truy vấn cho điều đó thay vào đó?
john

Nếu bạn có thể cung cấp câu trả lời về cách phát hiện tính năng đó được cài đặt qua WMI, thì tôi sẽ nâng cấp nó và kiểm tra nó. Bất kỳ câu trả lời nào có thể được sử dụng để xác định lõi Máy chủ với WMI sẽ hữu ích theo quan điểm của tôi.
Zoredache

Hãy thử sử dụng WMI trên các máy từ xa. Get-WMIObject Win32_OptionalFeature | Select Name, InstallStatevà lọc xem máy chủ có cài đặt bit GUI của máy chủ hay không.
Ryan Ries

Câu trả lời:


24

Trong PowerShell:

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

trả về 1 trên máy chủ đầy đủ và 2 trên cài đặt lõi máy chủ.

Biên tập:

Trong khi câu trả lời của tôi ở trên là chính xác, có hai vấn đề với nó:

  1. Khi sử dụng lệnh này trên máy trạm, nó không trả về gì, vì vậy bạn phải thêm một kiểm tra bổ sung cho việc này.

  2. Nó rất chậm, khi tôi thử nó, nó mất từ ​​600 đến 3500 mili giây.

Vì vậy, cách tiếp cận thực tế hơn là chỉ kiểm tra sự tồn tại của một tệp nhất định:

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

Điều này trả về $falsecho các cài đặt Server Core và $truecho tất cả những người khác và phải mất một phần nghìn giây để thực thi.


Câu trả lời tuyệt vời - Tôi đặc biệt thích cách giải quyết mà bạn đưa ra với tất cả các giải thích;) Hoàn hảo.
TomTom

6

Thật buồn cười, bài viết MSDN mà bạn liên kết có chứa câu trả lời:

Các giá trị SẢN PHẨM _ * _ SERVER_CORE không được trả về trong Windows Server 2012.

Điều này là do Server 2012 có thể được chuyển đổi tự do giữa cài đặt "Server Core" và "đầy đủ" chỉ bằng cách thêm hoặc xóa các tính năng phù hợp.

Bạn sẽ muốn kiểm tra sự hiện diện hay vắng mặt của các tính năng đó (ví dụ: Server-Gui-Mgmt-Infra, Server-Gui-Shell, Desktop-Experience).


5

Vì GUI chỉ là một tính năng, bạn có thể truy vấn danh sách các tính năng đã cài đặt

Chỉ cần thử nghiệm điều này trong powershell trên một máy chủ ở đây đã hoạt động đủ tốt:

Kết xuất một danh sách các tính năng để lấy tên

Get-WmiObject Win32_OptionalFeature > features.txt

Tìm kiếm văn bản của Feature.txt cho tôi biết tính năng này có tên 'Server-Gui-Mgmt' (các tính năng khác có thể được cài đặt giống như Michael ghi chú trong câu trả lời của anh ấy, vì vậy bạn cũng có thể kiểm tra để xem nếu đó là hiện tại

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

nhập mô tả hình ảnh ở đây


2

Tôi nghi ngờ rằng vì về cơ bản chúng giống nhau vào năm 2012 chỉ với một vài tính năng tùy chọn để phân biệt chúng, bạn có thể truy vấn các tính năng thay thế.

bài viết này là một tài liệu tham khảo cho lớp Win32_OptionalFeature, nó sẽ cho phép bạn truy vấn các tính năng. Các tính năng tùy chọn được định nghĩa là Server-Gui-Mgmt-Infra, Server-Gui-Shell và Desktop-Experience, như được nêu trong bài viết này .

Bạn có thể truy vấn 3 người trong số họ và sử dụng logic Boolean AND và KHÔNG để chọn các máy chủ không có các tính năng này được cài đặt.


2

Tôi sẽ sử dụng Win32_ServerFeature, nó là một lớp nhỏ hơn nhiều và chỉ chứa các vai trò được cài đặt trên máy chủ. Các truy vấn sử dụng tính năng Win32_Server sẽ trả về nhanh hơn nhiều.

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

2

Một số làm rõ về các câu trả lời cho các kịch bản cục bộ và từ xa khi hiệu suất đã được thảo luận. Người hỏi đã hỏi WMI và ví dụ của anh ta đã sử dụng PowerShell để gọi WMI. Sử dụng WMI trực tiếp từ mã không được quản lý cũng nhanh hơn.

Xin lưu ý rằng các phương pháp tiếp cận áp dụng hiệu quả cho Server 2012 và Server 2012 R2 và có thể không áp dụng cho các bản phát hành trong tương lai.

Một số sự đánh đổi tùy thuộc vào kịch bản của bạn ... Trong hầu hết các trường hợp, Win32_ServerFeature được ưu tiên như một giải pháp chung hoặc kiểm tra tệp cục bộ trong một nhúm.

  • Kiểm tra tập tin địa phương: nhanh chóng và bẩn. Rất ít bộ phận chuyển động.
  • MSFT_ServerManagerDeploymentT task: nhà cung cấp WMI cơ bản được sử dụng bởi Win32_ServerFeature và Get-WindowsFeature. Nó sử dụng bộ đệm registry cục bộ và thường trả về rất nhanh trừ khi có thay đổi cấu hình kể từ truy vấn cuối cùng. Trong trường hợp bộ nhớ cache bị mất, nó giống như Win32_OptionalFeature. Đây là một giao diện rất tốt nếu bạn truy vấn rất nhiều máy trên mạng nhanh và cần nhiều chi tiết về mối quan hệ của các thành phần và trạng thái của chúng - nhưng để sử dụng bình thường thì đó là một nỗi đau. Sử dụng Win32_ServerFeature thay thế.
  • Win32_ServerFeature: Nói chung là sự lựa chọn tốt nhất cho các truy vấn cục bộ hoặc từ xa, nhưng không nhanh như kiểm tra tệp cục bộ. Chỉ trả về các tính năng đã cài đặt và đặt ít lưu lượng truy cập trên mạng.
  • Get-WindowsFeature: Sử dụng rất đơn giản, giả sử bạn đã sử dụng PowerShell như một phần của đường dẫn cuộc gọi của mình. Khi gọi tới một mục tiêu từ xa, điều này đặt lên tới 400K trên toàn mạng, điều này quá mức cần thiết khi bạn chỉ muốn biết nếu một tính năng cụ thể được cài đặt.
  • Win32_OptionalFeature / Get-WindowsOptionalFeature: điều này truy vấn DISM trên mục tiêu mỗi lần có thể khá nặng.

Điều đó bao gồm các kịch bản địa phương và từ xa trực tuyến. Một số ở trên cũng sẽ nhắm mục tiêu một hình ảnh ngoại tuyến.


1

Tôi chỉ nghĩ rằng tôi sẽ kết hợp với Bộ lọc WMI cho giải pháp này, vì vậy bạn có thể áp dụng GPO cho các hệ thống Core 2012+:

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

Để kiểm tra điều này trên dòng lệnh:

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

Tôi đã vấp phải chủ đề này khi cố gắng tìm cách tạo Bộ lọc WMI cho máy chủ Core 2012 và vì một số lý do, tôi đã không kiểm tra WMI Win32_OptionalFeature (hoặc thực tế, có tồn tại một đường dẫn như vậy). Hy vọng điều này sẽ giúp người khác.


0

Trên Windows Server 2012 R2, tôi đang sử dụng các tính năng sau, hiệu suất vẫn tốt trong khi vẫn khá rõ ràng.

$gui = (Get-WindowsFeature -Name 'Server-Gui-Shell').Installed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.