Detectar WMI corrompido

3

Quando o WMI está corrompido, ele falhará das formas mais estranhas, certas consultas (a maioria delas) funcionarão, algumas lançarão exceções, outras expirarão e algumas simplesmente retornarão resultados não (ou parciais / errôneos).

Como tenho um importante e complicado trabalho de monitoramento do sistema WMI, gostaria de poder detectar um repositório WMI corrompido antes de executar o script. Determinar isso a partir do comportamento do script é difícil (devido às muitas maneiras como o WMI pode falhar) e muitas vezes pode-se gastar um tempo considerável para descobrir se é um erro do sistema ou do WMI.

Estou essencialmente procurando um método que possa ser executado no início do meu script do PowerShell para determinar de antemão se o WMI está corrompido.

    
por Lars Tackmann 29.10.2010 / 10:55

3 respostas

4

Existe um script fornecido pela equipe de suporte técnico da Microsoft, projetado especificamente para identificar e diagnosticar bancos de dados WMI corrompidos, o Utilitário de Diagnóstico WMI .

Mais informações sobre como usar isso em Solução de problemas WMI com WMIDiag .

Infelizmente eu não sei ao certo o quão útil isso vai ser para você se você quer rodar isso no começo da execução de um trabalho, é mais o tipo de coisa que as pessoas tendem a definir para executar automaticamente em sua propriedade. regularmente para relatar as máquinas que precisam ser analisadas.

    
por 29.10.2010 / 15:42
2

Uma maneira de fazer isso (se você definir o comportamento de falha do seu script como 'ignore') seria atribuir a instrução gwmi a uma variável e, em seguida, verificar a variável dessa variável.

$connectToWMI = gwmi win32_service -computername [computername]

verifique o status ou o valor da variável (usando write-host para ver o que esperar de uma conexão bem-sucedida e uma falha)

Também parece que você pode definir Traps para verificação de erros, mas eu não os usei. É algo assim:

trap [Exception] {continue}
    
por 29.10.2010 / 14:55
-4

Eu não tenho uma resposta para a pergunta específica, mas por que isso importa? Você recebe uma notificação do seu script que falhou e, em seguida, precisa corrigi-lo manualmente. Esta notificação está acontecendo porque o script falhou. Se você adicionou código extra no script para verificar primeiro o WMI corrompido, o fluxo de trabalho ainda seria exatamente o mesmo .

/ edit - OK - então você tem maneiras diferentes e potencialmente desconhecidas de o WMI falhar se estiver corrompido? E você está pedindo um único método para verificar se está corrompido? Então você é SOL. Eu vou notar que você diz

"(and the afterwords spending time figuring out if it failed for important system reasons or if its simply due to corrupted WMI)"

Bem, você precisa de melhores códigos de retorno e talvez um design funcional melhor no seu script. Se o seu script não está dizendo por que ele falhou, corrija-o. O gWaldo tem uma boa sugestão abaixo sobre o trapping. Neste ponto, acho melhor você repensar o que está fazendo e passar algum tempo no StackOverflow.

    
por 29.10.2010 / 12:20