Script para descobrir numero de série do computador

Windows Script para descobrir o número de série de um computador

Neste artigo irei apresentar um script para descobrir o número de série de um computador. Esta técnica será implementada por meio de um VBScript que poderá ser usado para obter o número de série de qualquer computador que estiver conectado na rede e no domínio do AD e cujo endereço IP possa ser resolvido seja por DNS ou WINS.




Porque descobrir o número de série?

Controle de patrimônio

Empresas e órgãos públicos que possuem um grande parque de equipamentos normalmente utilizam um sistema de controle de patrimônio no qual registram as informações a respeito de cada computador, impressora, nobreak etc.

Entre tais informações temos modelo, fabricante, fornecedor, número de série e outras, que servirão para identificar de forma única um determinado equipamento.

Assim quando um computador é adquirido é feito seu cadastro em um sistema de patrimônio e gerado um código, número de identificação ou tombamento, e a respectiva plaqueta que será afixada ao equipamento.

Quando o bem está devidamente identificado, inclusive com uma plaqueta já afixada, ele é alocado para um determinado setor e esta informação de local é registrada no controle de patrimônio.

Porém, este é um controle administrativo que, normalmente, não é feito pela área técnica e sim pelo setor que cuida do patrimônio físico da empresa. Além disso, não envolve somente os equipamentos de informática, sendo feito também para mesas, cadeiras, e outros tipos de materiais.

Sistemas de inventário

As áreas de suporte técnico de TI, por sua vez, lidam com outro tipo de software, os sistemas de inventário.

Um bom sistema de inventário de TI deve capturar, de forma automatizada, para cada equipamento informações mais detalhadas que não estão armazenadas no sistema de patrimônio.

Entre elas: tipo do processador, quantidade de memória, quais software estão instalados, qual usuário fez o login e também o número de série do equipamento.

Assim, o serial do computador pode funcionar como uma ligação entre os dois sistemas: patrimônio e inventário. De forma, que é essencial uma ferramenta para descobrir o número de série em situações que a única informação disponível é seu nome na rede.

Para obter estas informações do computador, o sistema de inventário pode usar ou não os agentes, que são programas clientes instalados nas estações e que fazem a coleta dos respectivos dados e os enviam para o servidor de inventário.

Existe no mercado uma gama variada de sistemas de inventário, alguns pagos e outros gratuitos, variando também em recursos que oferecem, entre eles: controle remoto, remoção remota de aplicativos, e outros.




Serial do Computador

Neste cenário temos dois sistemas independentes que guardam informações diferentes sobre os mesmos equipamentos e que deveriam possuir uma forma de integração que permitisse que ambos os conjuntos de informações estivessem disponíveis para seus usuários.

Isto é necessário caso, por exemplo, o suporte de TI necessite saber quem é o fornecedor do equipamento para acionar a garantia; ou quando o setor de patrimônio deseja saber se em um determinado equipamento está instalado um certo software.

Uma opção para integrar tais informações seria cadastrar no inventário, caso este permita, o número de identificação, aquele da plaqueta, fornecido pelo sistema de patrimônio.

Outra forma, mais automatizada, seria utilizar o número de série coletado automaticamente pelo sistema de inventário e utilizar este para obter as informações do sistema de patrimônio.

Suporte ao usuário

Outra utilidade de um script para descobrir o número de série são situações em que a plaqueta já foi extraviada, ou que o usuário não consegue localizá-la e sabe somente o nome do computador de que faz uso.

Assim, seria muito útil uma forma de descobrir, sabendo o nome ou ip de uma estação, o seu número de série e desta forma, para facilitar o suporte, consultar no sistema de inventário as características do computador em questão.

No restante deste artigo vamos mostrar como implementar um VBScript que, dado o nome ou endereço ip de um computador, exibirá na tela o respectivo número de série.

Encontrando o número de série

Os computadores atuais, estações de trabalho ou notebooks, possuem gravado em sua BIOS o respectivo número de série e, em sistemas Windows, esta informação pode ser acessada usando o WMI.

O que é WMI

É a sigla para Windows Management Instrumentation e consiste em um padrão desenvolvido e implementado pela Microsoft para permitir acesso às informações e notificações de computadores que fazem uso dos sistemas operacionais Windows, sejam estações de trabalho ou servidores.

Com o WMI a Microsoft pretendeu complementar padrões já existentes, como o DMI e o SNMP, e que já eram utilizados com a finalidade de prover informações, respectivamente, a respeito de computadores e ativos de rede.

No padrão WMI todas as informações de um equipamento estão organizadas de forma estruturada e para acessá-la basta realizar consultas (query) usando a linguagem WSQL, que é um pequeno subconjunto da linguagem SQL com comando adequados a este contexto.

Estão disponíveis as mais variadas informações a respeito dos computadores, como por exemplo: programas e drivers instalados; nome do fabricante; modelo; serial; usuário que fez o último login, e muitas outras.

Acessando as informações

O primeiro passo para ter acesso às informações disponíveis no WMI é criar um objeto que seja uma instância de uma classe WMI. Este objeto conterá a definição da classe, constituída pelos atributos, qualificadores e métodos que a descrevem.

A linha de comando em VBScript fornecida abaixo demonstra como é feita a criação do objeto, que neste caso é o objWMIService.

Obviamente a expressão COMPUTADOR deve ser substituída pelo nome do computador cujas informações queremos acessar.

Set objWMIService = GetObject(“winmgmts:{impersonationLevel = impersonate}!\\COMPUTADOR\root\cimv2”);

Para saber como instanciar um objeto da classe WMI no Powershell, C# e outros linguagens consulte a documentação fornecida pela Microsoft no link abaixo:

https://docs.microsoft.com/pt-br/windows/win32/wmisdk/retrieving-a-class?redirectedfrom=MSDN

De posse do objeto WMI, para acessar as informações desejadas basta agora invocar seu método ExecQuery para executar a consulta WSQL. Abaixo temos um exemplo de como isto é feito usando o VBScript:

colSMBIOS = objWMIService.ExecQuery(“SELECT * from Win32_SystemEnclosure”)

Esta query irá obter todas as informações de uma meta classe de nome Win32_SystemEnclosure que de acordo com os conceitos teóricos do WMI representa as propriedades que estão associadas ao invólucro físico de um dado sistema.

Para efeitos práticos entenda como acesso aos recursos físicos de um computador, entre eles acesso aos dados gravados em sua BIOS.

Segue abaixo o link de referência da documentação referente a classe Win32_SystemEnclosure :

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-systemenclosure

Nele estão relacionados todos os métodos, atributos, qualificadores e outras informações referente a esta meta classe.




O script

Finalmente chegamos ao que interessa, o código fonte do script, escolhi o VBScript devido ao fato de que é a linguagem que conheço melhor.

Contudo, tendo em mente os passos descritos na técnica acima e consultando as referências fornecidas você será capaz de implementar na linguagem que achar mais conveniente.

Prosseguindo com nosso script, em um arquivo de texto digite o código fornecido na listagem abaixo e salve com o nome de serial.vbs

strComputerName = WScript.Arguments(0)
numSerie = getSerial(strComputerName)
WScript.echo numSerie

Function getSerial(computerName)
Dim serialNumber
Set objWMIService = GetObject(“winmgmts:” & “{impersonationLevel = impersonate}!\\” & computerName & “\root\cimv2”)
Set colSMBIOS = objWMIService.ExecQuery(“SELECT * from Win32_SystemEnclosure”)

For Each objSMBIOS in colSMBIOS
serialNumber = objSMBIOS.SerialNumber
Next

getSerial = serialNumber
End function

Explicando o código

Na listagem acima, para manter o script um pouco mais simples, não inclui a validação de erros, falta, portanto, o código para lidar com a ausência de parâmetro, ou com a situação em que o nome do computador não existe.

Vamos assumir então que será passado um nome de computador e que este existe em sua rede local e está ativo (ligado) no momento.

Dito isto, vamos examinar o código acima. A primeira linha recebe o parâmetro passado na linha de comando e guarda na variável strComputerName.

Em seguida, a função de usuário getSerial é acionada recebendo como parâmetro no nome do computador e retornando na variável numSerie o respectivo número de série.

Finalmente esta variável numSerie é exibida na tela usando o comando WScript.echo.

Optei por usar uma função de usuário (Function getSerial) para deixar o código do script mais organizado e fácil de entender.

Esta função basicamente implementa a técnica que descrevemos no início deste texto para instanciar as classes WMI que contém a informação de número de série do computador.

Vale notar, que o valor de colSMBIOS é do tipo Collection e por este motivo, mesmo que na coleção exista somente um objeto, é necessário o código de iteração (For Each … Next) para obter o atributo desejado que neste caso é o SerialNumber.

Para saber mais sobres os campos de informação disponíveis, além do SerialNumber, recomendo, mais uma vez, que consulte a documentação a classe Win32_SystemEnclosure visitando o link abaixo:

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-systemenclosure




Exemplos de Execução

Para testar a execução deste script, digite no prompt de comando:

 serial.vbs %computername%

você deverá obter uma tela semelhante à ilustrada pela figura abaixo:


Caso queira consultar o número de série de outro computador na rede local basta informar o nome deste computador conforme o exemplo abaixo no qual obtivemos o número de série da estação csti05.

Executar usando o CSCRIPT

Caso o script não execute diretamente no prompt conforme ilustrado acima, tente executar usando a seguinte linha de comando:

cscript serial.vbs %computername%

Esta linha fará com que o script seja executado usando o cscript.exe que é um utilitário, presente nos sistemas Windows, que serve para executar scripts em linha de comando.
Veja abaixo a execução do script usando este método:

Espero que as informações deste post e o script sejam úteis para você.

Inscreva-se no blog se gostou do conteúdo e quer ser avisado quando postarmos novos artigos.

Consulte neste link mais artigos sobre administração de redes Windows.