sexta-feira, 11 de setembro de 2009

Script VBS para fazer inventário de computadores

Pessoal,

Quem não precisa fazer inventário de hardware e software das máquinas de rede? Pois é, eu mesmo já investi tempo percorrendo sites e fóruns em busca disto.
Esta semana recebi um script desenvolvido por um amigo, o Tiago Leal. O cara é administrador de rede e tinha a mesma necessidade, então escreveu um script muito bom que busca informações e exporta para um arquivo de texto para onde você desejar, não é realmente funcional!?
Vou colar na integra o e-mail do Tiagão abaixo, pois ele explica como o negócio funciona, afinal é o pai da criança, rs.

"Segue o script de inventário. Frisando que ainda é um script beta, porém funcionou em todos os testes que eu fiz.

O script realiza a busca por informações de SO, Processador, Memória, Disco, Impressoras e Programas e as imprime em um arquivo txt com o nome do usuário e computador de onde foi executado. O nome do arquivo gerado, como falei, segue a seguinte definição: “username – pcname”.
Antes de executar o script é necessário passar o local onde será salvo o arquivo com as informações. Na linha 12 há uma variável “strPath”, deve-se inserir o caminho, com uma barra no final, onde será salvo o arquivo entre as aspas após o “=”. Ex: strPath = “C:\caminho_do_script\”
Antes de realizar a coleta, o script verifica se já existe o arquivo com base no nome do próprio arquivo, se o mesmo usuário executa-lo em máquinas diferentes ele criará um arquivo de coleta para cada máquina mas mantendo o username. Caso o usuário execute o script mais de uma vez estando na mesma máquina, será criado apenas uma coleta, sendo necessário mover ou apagar o arquivo de coleta existente no local indicado para poder realizar uma outra coleta da mesma máquina.

Para fins de informação, no inicio do arquivo de coleta há a data e horário em que foi realizada a a busca pelas informações."


Segue o script, basta colá-lo em um notepad e salvar como VBS. Peço a todos a gentileza de manter os crédito do Tiago Leal.

' list_devices.vbs' Script que coleta informações do micro' Autor Tiago Leal - tiagoleal@petroeng.com.br' Version 1 - Setembro 2009
Set objNetWork = CreateObject("Wscript.Network")
strUserName = objNetwork.UserNamestrPcName = objNetwork.ComputerName
strNameFile = strUserName&" - "&strPcName
strPath = "E:\"
strPathFile = strPath & strNameFile &".txt"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(strPathFile) Then
WScript.Quit
End If
Set objFile = fso.OpenTextFile(strPathFile,2,True)
If Err.Number = 76 Then
MsgBox "O script não pode criar/acessar o local indicado. Acesso Negado." WScript.Quit End if
Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
objFile.WriteLine("----- Arquivo Criado em "& Date &" às "& Time &" -----")objFile.WriteBlankLines(2)
strSO = "Win32_OperatingSystem"strProcessor = "Win32_Processor"strMemory = "Win32_PhysicalMemory"strDisk = "Win32_DiskDrive"strPrint = "Win32_Printer"
Set objWMI = GetObject("winmgmts:")
' SISTEMA
objFile.WriteLine("SISTEMA:")objFile.WriteBlankLines(1)
Set colWMI = objWMI.InstancesOF(strSO)
For Each strWMI In colWMI
objFile.WriteLine(strWMI.Caption) dtmConvertedDate.Value = strWMI.InstallDate strData = dtmConvertedDate.GetVarDate objFile.WriteLine("Data de instalação: "& strData) objFile.WriteLine("Service Pack: "& strWMI.ServicePackMajorVersion) NextobjFile.WriteBlankLines(1)
' PROCESSADOR
objFile.WriteLine("PROCESSADOR:")objFile.WriteBlankLines(1)
Set colWMI = objWMI.InstancesOF(strProcessor)
For Each strWMI In colWMI
objFile.WriteLine(strWMI.Name &" "& strWMI.MaxClockSpeed &"Mhz") NextobjFile.WriteBlankLines(1)
' MEMÓRIA
objFile.WriteLine("MEMÓRIA:")objFile.WriteBlankLines(1)
Set colWMI = objWMI.InstancesOF(strMemory)
For Each strWMI In colWMI
objFile.WriteLine(strWMI.Capacity/1024/1024 &"MB") NextobjFile.WriteBlankLines(1)
' DISCO
objFile.WriteLine("DISCO:")objFile.WriteBlankLines(1)
Set colWMI = objWMI.InstancesOF(strDisk)
For Each strWMI In colWMI
objFile.WriteLine("Tamanho Total: "& Round(strWMI.Size/1024/1024/1024) &"GB") Next
objFile.WriteBlankLines(1)' IMPRESSORASobjFile.WriteLine("IMPRESSORAS:")objFile.WriteBlankLines(1)
Set colWMI = objWMI.InstancesOF(strPrint)
For Each strWMI In colWMI
objFile.WriteLine(strWMI.DeviceId) Next
objFile.WriteBlankLines(1)
' PROGRAMAS
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINEstrComputer = "."strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"strEntry1a = "DisplayName"strEntry1b = "QuietDisplayName"strEntry2 = "InstallDate"strEntry3 = "VersionMajor"strEntry4 = "VersionMinor"strEntry5 = "EstimatedSize"
Set objReg = GetObject("winmgmts://" & strComputer & _ "/root/default:StdRegProv")objReg.EnumKey HKLM, strKey, arrSubkeys
objFile.WriteLine("Programas Instalados:")objFile.WriteBlankLines(1)
For Each strSubkey In arrSubkeys intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, strEntry1a, strValue1) If intRet1 <> 0 Then objReg.GetStringValue HKLM, strKey & strSubkey, strEntry1b, strValue1 End If If strValue1 <> "" Then objFile.WriteLine("Nome: " & strValue1) End If objReg.GetStringValue HKLM, strKey & strSubkey, strEntry2, strValue2 If strValue2 <> "" Then objFile.WriteLine("Data de Instalação: " & strValue2) End If objReg.GetDWORDValue HKLM, strKey & strSubkey, strEntry3, intValue3 objReg.GetDWORDValue HKLM, strKey & strSubkey, strEntry4, intValue4 If intValue3 <> "" Then objFile.WriteLine("Versão: " & intValue3 & "." & intValue4) End If objReg.GetDWORDValue HKLM, strKey & strSubkey, strEntry5, intValue5 If intValue5 <> "" Then objFile.WriteLine("Tamanho Estimado: " & Round(intValue5/1024, 3) & " MB") End If
objFile.WriteBlankLines(1)
Next
' O script demora cerca de 6 segundos para completar a coleta das informações.


É isto ai pessoal, aproveitem este script porque ficou show de bola! Tiagão, obrigado cara!!!

Abraço a todos!

8 comentários:

  1. Salve Salve galerinha que baba colorido !!!

    Testei o script e funciona que é uma beleza.
    Parabéns Tiagão ... salvou a pele de um monte de ser humano !!! Rs
    Apenas não consegui rodar o script em pasta oculta.


    Valeu ... show de bola !!!

    ResponderExcluir
  2. Fala Marcelo Blz??? cara to tentando usar esse script, mais estou tento problemas na seguinte linha

    Set objReg = GetObject("winmgmts://" & strComputer & _ "/root/default:StdRegProv")

    Tem como me ajudar??? Ainda Não achei o erro!!!

    Valeu ai pra quem puder me ajudar...

    ResponderExcluir
  3. posso adaptar esse script em java ou php rsrsrsrs
    queria fazer algo com que amarrace os dados do cliente no server ao perfil da maquina.. com linux
    tipo php+ vb

    ResponderExcluir
  4. MValente, retire o "&_", e teste novamente

    ResponderExcluir
  5. Bom dia! Adaptei o script para enviar os dados no mysql. Porém estou querendo saber os drivers odbc q estão em cada maquina e não sei como. Alguém poderia ajudar?

    ResponderExcluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
  7. MsgBox "O script não pode criar/acessar o local indicado. Acesso Negado." WScript.Quit End if

    Essa é linha 12 pra mim... nao entendi no que teria que mudar.

    ResponderExcluir

O que é o Microsoft Azure afinal?

Salve! Não dá pra falar mais que é uma "onda", a nuvem pegou de verdade e já faz um tempo que para os mais inseridos no contexto...