Quero detectar se um servidor de 2012 está configurado como uma instalação Core usando o WMI. Uma pergunta anterior, parece indicar que posso obter o OperatingSystemSKU do Win32_OperatingSystem . Meus sistemas Windows 2012 Core estão relatando um OperatingSystemSKU de 7. O artigo da outra pergunta parece indicar um PRODUCT_STANDARD_SERVER e, se tiver uma instalação principal, espero ver um valor 0x0000000D em vez de PRODUCT_STANDARD_SERVER_CORE.
O que estou perdendo aqui. Eventualmente, quero criar uma política e usar a segmentação no nível do item para aplicar somente essa política às instalações do 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
wmi
windows-server-core
Zoredache
fonte
fonte
Get-WMIObject Win32_OptionalFeature | Select Name, InstallState
e filtre se o servidor tem os bits da GUI do servidor instalados ou não.Respostas:
No PowerShell:
retorna 1 em um servidor completo e 2 em uma instalação principal do servidor.
Editar:
Embora minha resposta acima esteja correta, há dois problemas:
Ao usar esse comando em uma estação de trabalho, ele não retorna nada; portanto, você deve adicionar uma verificação extra para isso.
É lento, quando tentei, demorou entre 600 e 3500 milissegundos.
Portanto, a abordagem mais pragmática é apenas verificar a existência de um determinado arquivo:
Isso retorna
$false
para instalações do Server Core e$true
para todas as outras e leva um milissegundo para ser executado.fonte
Engraçado, esse artigo do MSDN que você vinculou continha a resposta:
Isso ocorre porque o Server 2012 pode ser convertido livremente entre a instalação "Server Core" e a instalação "completa" simplesmente adicionando ou removendo os recursos apropriados.
Você deseja verificar a presença ou ausência desses recursos (por exemplo, Server-Gui-Mgmt-Infra, Server-Gui-Shell, Desktop-Experience).
fonte
Como a GUI é apenas um recurso, você pode consultar a lista de recursos instalados
Apenas testar isso no PowerShell em um servidor aqui funcionou bem o suficiente:
Despejar uma lista de recursos para pegar o nome
A pesquisa no texto de features.txt me diz que o recurso se chama 'Server-Gui-Mgmt' (outros recursos também podem ser instalados como Michael observa em sua resposta, para que você possa testá-los também), e podemos pesquisar para ver se estiver presente
fonte
Eu suspeito que, uma vez que eles são essencialmente os mesmos em 2012, com apenas alguns recursos opcionais para diferenciá-los, você pode consultar os recursos.
este artigo é uma referência para a classe Win32_OptionalFeature, que permitirá que você consulte os recursos. Os recursos opcionais são definidos como Server-Gui-Mgmt-Infra, Server-Gui-Shell e Desktop-Experience, conforme descrito neste artigo .
Você pode consultar os três deles e usar a lógica booleana AND e NOT para selecionar servidores que não possuem nenhum desses recursos instalados.
fonte
Eu usaria o Win32_ServerFeature, é uma classe muito menor e contém apenas as funções instaladas no servidor. Consultas usando o recurso Win32_Server devem retornar muito mais rapidamente.
fonte
Alguns esclarecimentos sobre as respostas para cenários locais e remotos à medida que o desempenho foi discutido. O interlocutor perguntou ao WMI e seu exemplo usou o PowerShell para invocar o WMI. Usar o WMI diretamente de código não gerenciado também é mais rápido.
Observe que as abordagens se aplicam efetivamente ao Server 2012 e Server 2012 R2 e podem não se aplicar a versões futuras.
Algumas desvantagens dependendo do seu cenário ... Na maioria dos casos, o Win32_ServerFeature é preferido como uma solução geral ou a verificação de arquivo local com uma pitada.
Isso abrange cenários locais e remotos on-line. Algumas das opções acima também terão como alvo uma imagem offline.
fonte
Eu apenas pensei em usar um filtro WMI para esta solução, para que você possa aplicar GPOs aos sistemas Core 2012+:
Para testar isso na linha de comando:
Eu tropecei nesse segmento ao tentar encontrar uma maneira de criar filtros WMI para servidores Core 2012 e, por algum motivo, não me ocorreu que o WMI verifique o Win32_OptionalFeature (ou, de fato, esse caminho existe). Espero que isso ajude outra pessoa.
fonte
No Windows Server 2012 R2, estou usando o seguinte, o desempenho é bom e ainda é bastante explícito.
fonte