segunda-feira, 7 de dezembro de 2009

Recriando Base de dados do WMI

Em uma base com muitos clientes do SCCM algumas vezes ocorre de os clientes não estarem realizando corretamente o inventário de hardware, isso muito vezes acontece por que a base do WMI da estação esta corrompida. Ha diversos metodos de reparar esta base, mas o que funciona quase 100% das vezes é a recriação da base WMI. Mas como saber quais os clientes que não estão realizando o inventário de hardware corretamente??
Podemos utilizar o próprio relatório do SCCM (Clients that have not reported recently (in a specified number of days) ID 140) ou por um método que eu creio ser mais facil, criar uma collection e olhar direto na console, através do seguinte query sql:


select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System inner join SMS_G_System_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId where SMS_G_System_COMPUTER_SYSTEM.Name not in (select SMS_R_System.Name from SMS_R_System inner join SMS_G_System_WORKSTATION_STATUS on SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId where SMS_G_System_WORKSTATION_STATUS.LastHardwareScan >= DateAdd(dd,-xx,GetDate()) ) or SMS_G_System_COMPUTER_SYSTEM.Name not in (select SMS_R_System.Name from SMS_R_System inner join SMS_G_System_LastSoftwareScan on SMS_G_System_LastSoftwareScan.ResourceID = SMS_R_System.ResourceId where SMS_G_System_LastSoftwareScan.LastScanDate >= DateAdd(dd,-xx,GetDate()))

Lembrando que os caracteres xx devem ser alterados com a numero de dias maximo a ser usado, se colocarmos 10, aparecerão todas as estações que não estão com o relatório de hardware e software feito nos ultimos 10 dias.


Com o report ou a collection prontos mãos a obra.

Eu particularmente costumo trabalhar muito com a suite de aplicativos psexec, que permite aos admins executarem comandos em estações de trabalho remotamente (isso por ser mais rapido, mas essa questão pode ser resolvida usando um package pelo proprio sccm, por exemplo executando o arquivo de lotes (bat) que sera mostrado a seguir, para rodar por exemplo uma vez por dia na collection de estações onde não esta sendo realizado o inventário de hardware) eu costumo usar o psexec por que se eu recrio a base WMI uma vez e o relatório não é realizado isso significa que o problema é outro, e não o WMI (cliente não instalado, ou não esta atualizando as politicas do sccm como deveria).

Sem mais delongas vamos ao script, que é muito simples mas funcional.
=========================================================================================
Net Stop ccmexec /y
Net Stop WinMgmt /y
cd \
cd windows\system32\wbem
ren Repository Repository_old
Net Start WinMgmt /y
Net Start ccmexec /y

=========================================================================================

Salve o conteudo em um arquivo .bat


abra o command

cd \caminho da pasta extraida do psexec\

crie um arquivo de texto com os computadores listados na collection de computadores não inventariados nos ultimos xx dias (pode ser feito na propria console do sccm view > export list ), salve esse arquivo no mesmo diretorio do psexec


e execute o seguinte comando

psexec @nomedoarquivo.txt -s \\caminhodoarquivobat


O psexec então buscará todos os nomes dos computadores da lista e irá executar o bat neles, recriando então o repositóio do WMI.

Nenhum comentário:

Postar um comentário