quarta-feira, 30 de julho de 2008

Levantamento de Hardware via VBScript (.vbs)

VBScript (acrónimo de Microsoft's Visual Basic Scripting Edition) é um sub-sistema do Visual Basic usado em Active Server Pages em Windows Scripting Host como uma linguagem de aplicação universal (general-purpose). O VBScript é frequentemente usado em substituição dos batch files DOS.
VBScript é interpretado por um script engine, seja um ASP num ambiente web, wscript.exe num ambiente Windows, e cscript.exe num ambiente de linha de comando.
Fonte: Wikipedia

Agora que você já sabe o que é um vbs, vamos ao que interessa, eu precisava levantar rapidamente as configurações das máquinas para criar um inventário de hardware, todo mundo já fez isso e sabe que é um inferno, passar de máquina em máquina vendo as configurações, anotando, depois monta a planilha ou banco de dados, enfim sem chances.
Poderia também montar um servidor para isso, usando o OCS Inventory NG ou o Cacic, mas lembre-se eu precisava levantar rapidamente as configurações, e ae o que fazer? A solução foi um vbs.

Através do Blog do Vinicius Canto, achei o post no fórum Technet-br, excelente script gera um relatório em html com sumário, exibe as informações em sessões, maravilha; Só que ele te pergunta de qual computador você quer gerar as informações

e depois algumas opções de geração de relatório.


Ae pensei, pô mas se eu pudesse gerar esse cara via script de login, ae sim seria perfeito, não que é que o Anthony já tinha pensado nisso!! Só que o dele gerava um arquivo .xml, fiz algumas adaptações para gerar só as informações que realmente me interessavam, removi as tags xml e gerei um .txt. Depois ficou fácil gerar uma planilha com as informações.

Segue abaixo o meu script baseado nos acima:
hardware.vbs

' Modificaçao para o arquivo gerado ter o nome do computador.

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_ComputerSystem",,48)
For Each objItem in colItems
NomeComputador = objItem.Caption
Next


'----------------------------- Cria o arquivo

Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile("\\IP\NOME_DO_COMPARTILHAMENTO\" & NomeComputador & ".txt", True)
txtfile.Write ("Relatório de Hardware:")
txtfile.WriteBlankLines(3)
'--------------- Software
strComputer = "."
strProperties = "*"'"CSName, Caption, OSType, Version, OSProductSuite, BuildNumber, ProductType, OSLanguage, CSDVersion, InstallDate, RegisteredUser, Organization, SerialNumber, WindowsDirectory, SystemDirectory"
objClass = "Win32_OperatingSystem"
strQuery = "SELECT " & strProperties & " FROM " & objClass
Set colOS = objWMIService.ExecQuery(strQuery, , wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem in colOS
txtfile.write ("Nome:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.CSName)
txtfile.WriteBlankLines(1)
txtfile.write ("S.O.:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.Caption)
txtfile.WriteBlankLines(1)
If SO_Type = 16 Then
SO_Name = "Microsoft Windows 95"
ElseIf SO_Type = 17 Then
SO_Name = "Microsoft Windows 98"
End If
If SO_ProdType = 1 Then
SO_ProdType = "Estação de Trabalho"
ElseIf SO_ProdType = 2 Then
SO_ProdType = "Controlador de Domínio"
ElseIf SO_ProdType = 3 Then
SO_ProdType = "Servidor"
End If
If SO_Language = 1033 Then
SO_Language = "Inglês - Estados Unidos"
ElseIf SO_Language = 1046 Then
SO_Language = "Português - Brasil"
Else
SO_Language = "Outro idioma"
End If
If SO_Suite = 1 Then
SO_Suite = "Small Business"
ElseIf SO_Suite = 2 Then
SO_Suite = "Enterprise"
ElseIf SO_Suite = 4 Then
SO_Suite = "Backoffice"
ElseIf SO_Suite = 8 Then
SO_Suite = "Communication Server"
ElseIf SO_Suite = 16 Then
SO_Suite = "Terminal Server"
ElseIf SO_Suite = 18 Then
SO_Suite = "Enterprise e Terminal Server"
ElseIf SO_Suite = 32 Then
SO_Suite = "Small Business (Restrito)"
ElseIf SO_Suite = 64 Then
SO_Suite = "Embedded NT"
ElseIf SO_Suite = 128 Then
SO_Suite = "Data Center"
ElseIf SO_Suite = 256 Then
SO_Suite = "Single User"
ElseIf SO_Suite = 512 Then
SO_Suite = "Personal"
ElseIf SO_Suite = 1024 Then
SO_Suite = "Blade"
End If
Next
'------------------------------------------------------ Usuario----
txtfile.WriteBlankLines(1)
txtfile.write ("Usuário:")
txtfile.WriteBlankLines(1)
objClass = "Win32_ComputerSystem"
strQuery = "SELECT " & strProperties & " FROM " & objClass
Set colSys = objWMIService.ExecQuery(strQuery, , wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem in colSys
txtfile.write (objItem.UserName)
txtfile.WriteBlankLines(1)
Next
'-------------------------------Processador
txtfile.write("Processador:")
txtfile.WriteBlankLines(1)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Processor",,48)
For Each objItem in colItems
'------------------------------------------------- Nome do processador
txtfile.write (objItem.name)
txtfile.WriteBlankLines(1)
'------------------------------------------------- Clock
txtfile.write ("Clock:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.CurrentClockSpeed & " MHZ")
txtfile.WriteBlankLines(1)
Next
'----------------------------------Memoria
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_physicalmemory",,48)
For Each objItem in colItems
'------------------------------------------------- Nome do Banco
txtfile.write ("Memória:")
'------------------------------------------------- Capacidade
txtfile.write ("Capacidade:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.capacity/1048576)
txtfile.WriteBlankLines(1)
Next
'---------------------------------- hd
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_diskdrive",,48)
For Each objItem in colItems
'------------------------------------------------- modelo do disco
txtfile.write ("Disco:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.caption)
txtfile.WriteBlankLines(1)
'----------------------------------------------------- Interface
txtfile.write ("Interface:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.interfacetype)
txtfile.WriteBlankLines(1)
'----------------------------------------------------- Tamanho
txtfile.write ("Tamanho:")
txtfile.WriteBlankLines(1)
txtfile.write (int(objItem.size/1073741824) & " GB")
txtfile.WriteBlankLines(1)
Next
'------------------------------------------------- Nome do adaptador
strComputer = "."
strProperties = "Description, MACAddress, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder, DNSDomain, DNSDomainSuffixSearchOrder, DHCPEnabled, DHCPServer, WINSPrimaryServer, WINSSecondaryServer, ServiceName"
objClass = "Win32_NetworkAdapterConfiguration"
strQuery = "SELECT " & strProperties & " FROM " & objClass & " WHERE IPEnabled = True AND ServiceName <> 'AsyncMac' AND ServiceName <> 'VMnetx' AND ServiceName <> 'VMnetadapter' AND ServiceName <> 'Rasl2tp' AND ServiceName <> 'PptpMiniport' AND ServiceName <> 'Raspti' AND ServiceName <> 'NDISWan' AND ServiceName <> 'RasPppoe' AND ServiceName <> 'NdisIP' AND ServiceName <> ''"
Set colAdapters = objWMIService.ExecQuery(strQuery, , wbemFlagReturnImmediately + wbemFlagForwardOnly)
'--------------------------------------------------------rede
For Each objItem in colAdapters
'For Each objItem in colItems
txtfile.write ("Adaptador:")
txtfile.WriteBlankLines(1)
txtfile.write (objItem.Description)
txtfile.WriteBlankLines(1)
'------------------------------------------------- IP
txtfile.write ("IP:")
txtfile.WriteBlankLines(1)
IP_Address = objItem.IPAddress
txtfile.write (IP_Address(i))
txtfile.WriteBlankLines(1)
Next

10 comentários:

Unknown disse...

grande DEO.. ficou bem legal..ajudou muito ja que precisamos descobrir..tudo de mais de 100 micros e tinha que ser urgente..rsrs

muito bom mesmo...valeu pela postagem

Unknown disse...

AEEE Deo

Agora é só dar aulas!

Abrax

Adriano disse...

Grande Déo!!!

Quem sabe faz faz ao vivo! Diz a lenda... :))

Ficou matador!!

Parabéns!

Unknown disse...

Boa tarde, belo scrip, porem esta ocorrendo um erro comigo, na linha 16, caract 1, erro permissão negada, código 800A0046

Vitor Oliveira disse...

Perfeito script, gostaria de saber como faço pra ele funcionar pegando todas as maquinas da minha rede. Fico no aguardo.

André Déo disse...

Vitor como eu disse no post...

É só vc colocoar como script de login!!

Abraços,
Déo

Name is DouGC disse...

Onde é que a gente aprende este tipo de coisa? Quero dizer, quais são as fontes (sites) que disponibilizam material para tal conhecimento?

André Déo disse...

Gonzace,

Procure no google por vbscript:
http://www.visualbasicscript.com/
http://www.w3schools.com/vbscript/default.asp
http://msdn.microsoft.com/en-us/library/sx7b3k7y%28v=vs.85%29.aspx

E também tem livros, basta procurar por VBScript Books

Abraços,
Déo

Lisandro disse...

Boa tarde,

Tem como eu colocar esse script no zabbix?

innerbit disse...

gostaria de salvar o arquivo HTML com data e hora na frente do nome da maquina
exemplo: NOME DA MAQUINA 01-09-2016~16-05.html
Podem me ajudar?