Estamos lidando com toda a nossa lógica de segmentação de pacotes (e agora aplicativos) com coleções. Agora que mudamos do SCCM 2007 para o SCCM 2012 SP1, foi recomendado que movêssemos essa lógica para o modelo do Programa de Aplicativos e a implementássemos usando Condições Globais e Requisitos. Isso tem vários benefícios positivos: as coleções são usadas apenas para agrupamentos hierárquicos ou lógicos, obtemos uma implantação de aplicativos mais perfeita ao usar o Supercedence e aprimoramos a lógica de detecção.
Vou usar o plug-in do Adobe Flash Player como exemplo. Queremos apenas implantar o plug-in do Adobe Flash Player em estações de trabalho que tenham o Firefox instalado. Usando o modelo SCCM 2007 Package-Program, criamos uma coleção baseada em uma consulta WQL que continha todas as estações de trabalho com o Firefox instalado:
select * from SMS_R_System inner join SMS_G_System_SoftwareProduct
on SMS_G_System_SoftwareProduct.ResourceId = SMS_R_System.ResourceId
where SMS_G_System_SoftwareProduct.ProductName like "Mozilla Firefox"
Uma vez que a coleção foi criada, nós implantaremos nosso pacote-programa. Eu estou tentando replicar a mesma lógica usando lógica de requisitos globais e requisitos do programa de aplicativo. Todas as minhas tentativas de criar minha Condição Global com base na consulta WQL resultam em um wbemErrTypeMismatch ( 2147749893 (0x80041005)
).
Agora, as práticas recomendadas recomendam que mantemos nossa lógica de segmentação junto com o Aplicativo. O que precisamos fazer é criar uma Condição Global da consulta WQL apropriada e, em seguida, podemos avaliá-la usando os Requisitos do Aplicativo.
Vamos começar com a consulta WQL. Eu usei o Scriptomatic para apenas despejar tudo na classe% W_de% WMI que faz parte do namespace SMS_InstalledSoftware
. Tenho certeza de que o SMS_InstalledSoftware é o melhor local para executar consultas ao tentar avaliar se ou não, algo está instalado como Win32_Product é apenas para o software instalado pelo Windows Installer.
Encontrei o seguinte objeto relacionado ao Firefox:
ARPDisplayName: Mozilla Firefox 23.0.1 (x86 en-US)
ChannelCode:
ChannelID:
CM_DSLID:
EvidenceSource: CPXCCCCCCXCXCXCXXXXXCXXXXX
InstallDirectoryValidation: 4
InstalledLocation: C:\Program Files (x86)\Mozilla Firefox
InstallSource:
InstallType: 0
Language: 0
LocalPackage:
MPC:
OsComponent: 0
PackageCode:
ProductID:
ProductName: Mozilla Firefox 23.0.1 (x86 en-US)
ProductVersion: 23.0.1
Publisher: Mozilla
RegisteredUser:
ServicePack:
SoftwareCode: mozilla firefox 23.0.1 (x86 en-us)
SoftwarePropertiesHash: 63896ed23146ec91dbc763b45c127ba31216e2f9d657a87953440d30b7f306bc
SoftwarePropertiesHashEx: 67c2ecc42f0e0b9da6ee55bc0dea67a4d90b9e8452c9fdb25db57d4891698f25
UninstallString: "C:\Program Files (x86)\Mozilla Firefox\uninstall\helper.exe"
UpgradeCode:
VersionMajor: 2147483647
VersionMinor: 2147483647
Executar o WQL com a propriedade ProductName parece ser um bom caminho a percorrer. Se eu executar root\cimv2\sms
em SELECT * FROM SMS_InstalledSoftware WHERE ProductName like '%Firefox%'
no namespace wbemtest
, obtenho o seguinte:
VamostentarconstruiraCondiçãoGlobalnoSCCMaseguir:
Isso é completamente não intuitivo, mas acho que entendi corretamente. As Condições Globais apenas configuram a parte condicional de toda a lógica do Aplicativo-Programa, não qualquer lógica de Programa de Aplicação avaliativa . Por esse motivo, não estou fazendo nada na cláusula WHERE. Essa Condição Global deve procurar no namespace root\cimv2\sms
para a classe root\cimv2\sms
e "retornar" a propriedade ProductName. Agora devo ser capaz de avaliar o valor / s dessa propriedade com o requisito de tipo de implantação dos meus aplicativos, certo?
Mais uma vez - ou não estou entendendo como a lógica da Condição / Requisitos Globais se mantém unida ou é apenas não intuitivo, mas o Requisito acima deve ser capaz de examinar todas as Strings retornadas da propriedade SMS_InstalledSoftware
, avaliar se qualquer um deles contém 'Firefox' e, se assim for, implantar com alegria o plugin do Adobe Flash Player.
Infelizmente isso não funciona. Quase todas as máquinas no Deployment retornam o seguinte erro:
2147749893 (0x80041005) Type Mismatch
Suponho que isso signifique que a Condição Global está retornando um tipo diferente de variável do que estou avaliando em meu Requisito, mas não tenho ideia de como resolvê-lo a partir daqui. Eu tentei definir o tipo da minha condição global como booleano e definir a cláusula WHERE ( ProductName
), mas isso gera o mesmo erro.
Como posso replicar minha coleção baseada em consulta WQL usando a lógica de segmentação Global Condição / Requisitos do Programa de Aplicativos? O que estou perdendo aqui (além do apt-get)?