Windows 2012 Server çekirdeğini belirleme


18

2012 sunucusunun WMI kullanılarak Core kurulumu olarak ayarlanıp ayarlanmadığını tespit etmek istiyorum. Daha önceki bir soru, Win32_OperatingSystem'dan OperatingSystemSKU'yu alabileceğimi gösteriyor gibi görünüyor . Windows 2012 Çekirdek sistemlerim bir İşletim SistemiSKU 7 bildiriyor . Diğer sorudaki makale bir PRODUCT_STANDARD_SERVER olduğunu gösteriyor ve çekirdek bir kurulum varsa, PRODUCT_STANDARD_SERVER_CORE yerine 0x0000000D değerini görmeyi beklemeliyim.

Burada ne eksik. Sonunda bir ilke oluşturmak ve yalnızca bu politikayı yalnızca Windows 2012 Server Core yüklemelerine uygulamak için öğe düzeyinde hedeflemeyi kullanmak istiyorum.

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

Sorunuza ufak bir sapma olarak ... Sunucu çekirdeğini nasıl tanımlarsınız? Sunucu çekirdeğinin yüklü bir veya iki daha az özellik (GUI) ile aynı olduğunu okudum. Bunun yerine sorgulama yapamaz mısınız?
john

Bu özelliğin WMI aracılığıyla yüklendiğini nasıl algılayacağınıza dair bir cevap verebilirseniz, onu yükseltir ve test ederim. WMI ile Sunucu çekirdeğini tanımlamak için kullanılabilecek herhangi bir cevap bence yararlı olacaktır.
Zoredache

Uzak makinelerde WMI kullanmayı deneyin. Get-WMIObject Win32_OptionalFeature | Select Name, InstallStateve sunucuda sunucu GUI bitlerinin yüklü olup olmadığına filtre uygulayın.
Ryan Ries

Yanıtlar:


24

PowerShell'de:

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

tam sunucuda 1 , sunucu çekirdek kurulumunda 2 döndürür .

Düzenle:

Yukarıdaki cevabım doğru olsa da, bununla ilgili iki sorun var:

  1. Bu komutu bir iş istasyonunda kullanırken hiçbir şey döndürmez, bu nedenle bunun için fazladan bir kontrol eklemeniz gerekir.

  2. Yavaş, denediğimde 600 ila 3500 milisaniye sürdü.

Bu yüzden daha pragmatik yaklaşım sadece belirli bir dosyanın varlığını kontrol etmektir:

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

Bu $false, Sunucu Çekirdeği yüklemeleri ve $truediğerleri için geri döner ve yürütülmesi bir milisaniye sürer .


Harika cevap - Özellikle tüm açıklamalar ile sunduğunuz geçici çözümü seviyorum;) Mükemmel.
TomTom

6

Komik, bağladığınız MSDN makalesinde cevap vardı:

PRODUCT _ * _ SERVER_CORE değerleri Windows Server 2012'de döndürülmez.

Bunun nedeni, Server 2012'nin yalnızca uygun özellikleri ekleyerek veya kaldırarak "Sunucu Çekirdeği" ve "tam" yükleme arasında serbestçe dönüştürülebilmesidir.

Bu özelliklerin varlığını veya yokluğunu kontrol etmek isteyeceksiniz (örn. Server-Gui-Mgmt-Infra, Server-Gui-Shell, Masaüstü Deneyimi).


5

GUI sadece bir özellik olduğundan, yüklü özelliklerin listesini sorgulayabilirsiniz

Bunu burada bir sunucuda powershell'de test etmek yeterince iyi çalıştı:

Adı almak için bir özellik listesi dökümü

Get-WmiObject Win32_OptionalFeature > features.txt

Features.txt metninde arama yapılması, bu özelliğin 'Sunucu-Gui-Mgmt' olarak adlandırıldığını söyler (diğer özellikler de cevabında Michael notları olarak da yüklenebilir, böylece bunları da test edebilirsiniz) ve görmek için arama yapabiliriz eğer mevcutsa

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

resim açıklamasını buraya girin


2

Onları ayırmak için sadece birkaç isteğe bağlı özellik ile 2012'de aslında aynı olduğundan, bunun yerine özellikleri sorgulayabileceğinizden şüpheleniyorum.

bu makale , özellikleri sorgulamanıza olanak tanıyan Win32_OptionalFeature sınıfı için bir başvurudur. İsteğe bağlı özellikler, bu makalede ana hatlarıyla belirtildiği gibi, Sunucu-Gui-Mgmt-Infra, Sunucu-Gui-Kabuk ve Masaüstü Deneyimi olarak tanımlanır .

3 tanesini sorgulayabilir ve bu özelliklerin hiçbirinin yüklü olmadığı sunucuları seçmek için Boolean AND ve NOT mantığını kullanabilirsiniz.


2

Win32_ServerFeature kullanırım, çok daha küçük bir sınıftır ve yalnızca sunucuda yüklü rolleri içerir. Win32_Server özelliğini kullanan sorgular çok daha hızlı dönmelidir.

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

2

Performans olarak yerel ve uzak senaryoların cevapları hakkında bazı açıklamalar tartışıldı. Soru soran WMI'ya sordu ve örneği WMI'yı çağırmak için PowerShell'i kullandı. WMI'yı doğrudan yönetilmeyen koddan kullanmak da daha hızlıdır.

Yaklaşımların Server 2012 ve Server 2012 R2 için etkili bir şekilde geçerli olduğunu ve gelecekteki sürümlerde geçerli olmayabileceğini lütfen unutmayın.

Senaryonuza bağlı olarak bazı değiş tokuşlar ... Çoğu durumda, Win32_ServerFeature genel bir çözüm olarak veya bir tutam yerel dosya kontrolü olarak tercih edilir.

  • Yerel dosya kontrolü: hızlı ve kirli. Çok az hareketli parça.
  • MSFT_ServerManagerDeploymentTasks: Win32_ServerFeature ve Get-WindowsFeature tarafından kullanılan temel WMI sağlayıcısı. Yerel bir kayıt defteri önbelleği kullanır ve son sorgudan bu yana bir yapılandırma değişikliği olmadıkça normalde çok hızlı bir şekilde döner. Önbellek kaçırma durumunda, Win32_OptionalFeature ile hemen hemen aynıdır. Hızlı bir ağda çok sayıda makineyi sorguluyorsanız ve bileşenlerin ilişkileri ve durumları hakkında çok fazla ayrıntıya ihtiyacınız varsa, bu çok iyi bir arayüzdür - ancak normal kullanım için bir acıdır. Bunun yerine Win32_ServerFeature öğesini kullanın.
  • Win32_ServerFeature: Genellikle yerel veya uzak sorgular için en iyi seçimdir, ancak yerel dosya denetimi kadar hızlı değildir. Yalnızca yüklü özellikleri döndürür ve ağa çok az trafik koyar.
  • Get-WindowsFeature: Çağrı yolunuzun bir parçası olarak zaten PowerShell kullandığınızı varsayarsak, kullanımı çok basittir. Uzak bir hedefe karşı arama yaparken, ağ üzerinde 400K yukarı taşınır ve yalnızca belirli bir özelliğin kurulu olup olmadığını bilmek istediğinizde aşırıya kaçar.
  • Win32_OptionalFeature / Get-WindowsOptionalFeature: Bu, oldukça ağır olabilecek her seferinde hedefe DISM'yi sorgular.

Bu, çevrimiçi yerel ve uzak senaryoları kapsar. Yukarıdakilerden bazıları da çevrimdışı bir resmi hedefleyecektir.


1

Bu çözüm için bir WMI Filtresi ile giriş yapacağımı düşündüm, böylece Core 2012+ sistemlerine GPO'ları uygulayabilirsiniz:

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

Bunu komut satırında test etmek için:

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

Core 2012 sunucuları için WMI filtreleri oluşturmanın bir yolunu bulmaya çalışırken bu iş parçacığında tökezledim ve bazı nedenlerden dolayı WMI Win32_OptionalFeature'ı kontrol ettim (ya da gerçekten böyle bir yol var). Umarım bu başka birine yardımcı olur.


0

Windows Server 2012 R2'de aşağıdakileri kullanıyorum, yine de oldukça açık olsa da performans iyi.

$gui = (Get-WindowsFeature -Name 'Server-Gui-Shell').Installed
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.