WMIC Query retornando uma resposta inesperada?

0

Desculpas se isso parece ser uma questão noob ... mas eu não consigo entender isso pela minha vida. Estou usando o WQL para consultar o WMI para a versão do BIOS da Dell em uma sequência de tarefas no SCCM. Essa consulta de WQL está abaixo:

select * from WIN32_BIOS where SMBIOSBIOSVersion < "1.10.5"

Simples o suficiente. Esta etapa será executada (e instalará a versão mais recente do BIOS da Dell) se a versão do BIOS na máquina que estiver executando a sequência for menor que a versão atual, 1.10.5. Longa história curta ... o passo não correu. Então eu comecei a investigar.

Na máquina que a sequência de tarefas deveria executar, a versão do BIOS é 1.7.3. Eu abro um prompt de comando e executo o seguinte ...

wmic BIOS get SMBIOSBIOSVersion

Qual retorna 1.7.3. NO ENTANTO ... quando eu executo a consulta WMIC abaixo, recebo "No Instances Available"

C:\>wmic BIOS where "SMBIOSBIOSVersion < '1.10.5'" get SMBIOSBIOSVersion
No Instance(s) Available.

Executando a consulta com o ">" em vez de "<" Obtém o resultado desejado.

C:\>wmic BIOS where "SMBIOSBIOSVersion > '1.10.5'" get SMBIOSBIOSVersion
SMBIOSBIOSVersion
1.7.3

Estou perplexo. 1.10.5 é maior que 1.7.3 (claramente) mesmo em formato hexadecimal (verifiquei no caso de alguma anomalia estranha).

A remoção das aspas simples não funciona porque a consulta se torna inválida. (IE "SMBIOSBIOSVersion > 1.10.5")

Mais uma vez, peço desculpas se esta é uma questão noob. Eu sou relativamente novo no WMI e consultando usando WMIC e WQL. Eu não preciso necessariamente do script correto. Eu realmente quero saber exatamente porque esse resultado não é o que eu esperava.

    
por dr4g1116 22.11.2016 / 21:23

1 resposta

2

Como apontado nos comentários, a propriedade SMBIOSBIOSVersion é uma string. Portanto, as comparações são feitas apenas nos caracteres de texto; o valor numérico representado pelo texto não é considerado. Por exemplo, a string 9 classificaria após 8 , mas também muito depois de 10 , porque 1 ordena antes dos dígitos maiores. (Possivelmente relevante: Tabela ASCII .)

Você deve fazer suas comparações na propriedade SMBIOSMajorVersion e SMBIOSMinorVersion , se necessário. Fonte: Win32_BIOS no MSDN . Se você precisar verificar ambos, o operador and fará exatamente o que você espera.

    
por 22.11.2016 / 22:57