none
Verificar Softwares e Versões RRS feed

  • Pergunta

  • Boa Tarde!

    Estou com um trabalho que tenho que saber todos programas instalados nas estações de trabalho da rede e a versão de cada programa.

    vocês conhecem algum programa ou script para verificar isso?

    As estações clientes possuem S.O Windows XP Professional ou Windows 7 ou Windows Vista.

    Obrigado.

    segunda-feira, 14 de março de 2011 16:08

Respostas

  • Solução

    Utilizamos o MAP (Microsoft Assessment and Planning), que ajudou com a plataforma microsoft e o System Center Manager 2007.

    Att.

    • Marcado como Resposta Dênis Júnio domingo, 10 de abril de 2011 02:53
    domingo, 10 de abril de 2011 02:52

Todas as Respostas

  • olá Dênis,

    você ja abriu dois tópico com este mesmo assunto e já foi respondido,tente a solução do nosso amigo e centralize seus comentários no mesmo para manter a organização no fórum

    http://social.technet.microsoft.com/Forums/pt-BR/winvistapt/thread/8dd350ee-fa53-448f-8634-bd952ecc84a8/

    http://social.technet.microsoft.com/Forums/pt-BR/winsrv2003pt/thread/f43a36e7-8904-493a-b367-98093ae2a43b/

     

    abs

    segunda-feira, 14 de março de 2011 17:14
  • Segue um script bala!

    Só alterar o caminho desejado, e também retirar ou adicionar itens.

    Espero que te ajude, qualquer coisa retorne

     

    '+-------------------------------------------------------------------+
    '+ Faz inventário 'in loco' de Hardware/Software de máquina(HOSTNAME)
    '+-------------------------------------------------------------------+
    On Error Resume Next
    Const ForWriting = 2
    Const HKEY_CLASSES_ROOT = &H80000000
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const ForAppending = 8
    Dim objFSO
    Dim strType
    Dim strTipo
    Dim objTextFile
    Dim objWMIService
    Dim colItems
    Dim objItem
    Dim strComputer
    Dim strUsuario
    Dim strUsuarioAD
    Dim strFullName
    Dim strFabricante
    Dim strMAC
    Dim strIP_Address
    Dim strSistOper
    Dim strProcessador
    Dim strFrequenciaProcessador
    Dim strModelo
    Dim strSerialNumber
    Dim strMemoria
    Dim strDisco
    Dim nMemoria
    Dim nDisco
    Dim strKeyPath
    Dim subkeyPath
    Dim arrSubKeys
    Dim subKey
    Dim softwareName
    Dim softwareVersion
    Dim softwareInstallDate
    Dim installLocation
    Dim intVer1
    Dim intVer2
    Dim strNomeAba

    'Obtem detalhes do HOSTNAME local *** INVENTÁRIO DE HARDWARE ***
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

    'Inicializa variáveis
    strComputer = ""
    strUsuario = ""
    strMaquina = ""
    strSistOper = ""
    strProcessador = ""
    strMemoria = ""
    strDisco = ""
    strTipo = ""

    'Obtem detalhes do Micro 1
    Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkLoginProfile", , 48)
    For Each objItem In colItems
        'strUsuario = Trim(objNetwork.UserName)
        strFullName = Trim(objItem.Fullname)
    Next
    'Obtem detalhes do Micro 2
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", , 48)
    For Each objItem In colItems
        strComputer = Trim(objItem.Caption)
        strUsuario = Trim(objItem.UserName)
        strFabricante = Trim(objItem.Manufacturer)
        strModelo = Trim(objItem.Model)
        strMemoria = round(objItem.TotalPhysicalMemory/(1024*1024))
    Next

    'Obtem detalhes REDE
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")
    strUsuarioAD = objNetwork.UserName
    Const wbemFlagReturnImmediately = &h10
    Const wbemFlagForwardOnly = &h20
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
    For Each objItem In colItems
        strIPAddress = Join(objItem.IPAddress, ",")
        strMAC = Trim(objItem.MACAddress)
    ''            *yourFunctionName*(strIPAddress)
    Next

    'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration ")
    For Each objItem in colItems
        If Not IsNull(objItem.IPAddress) Then
            For i=LBound(objItem.IPAddress) to UBound(objItem.IPAddress)
    '              WScript.Echo IPConfig.IPAddress(i)
                   If (objItem.IPAddress(i) > 0) Then
                    strIPAddress =  objItem.IPAddress(i)
                   End If                  
            Next
        End If
    Next

    'Wscript.Echo "Meu ip é" & strIPAddress

    'Obtem detalhes do Sistema Operacinal
    Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem", , 48)
    For Each objItem In colItems
        strSistOper = Trim(objItem.Caption) & " (" & Trim(objItem.CSDVersion) & ")"
    Next
    'Obtem detalhes da CPU
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor", , 48)
    For Each objItem In colItems
        strProcessador = Trim(objItem.Name)
        strFrequenciaProcessador = Trim(objItem.CurrentClockSpeed)
    Next
    'Obtem detalhes do Micro - Serial
    Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS", , 48)
    For Each objItem In colItems
        strSerialNumber = Trim(objItem.SerialNumber)
    Next
    'Obtem detalhes dos drives Fixos
    nDisco = 0
    Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk where DriveType = '3'", , 48)
    For Each objItem In colItems
        nDisco = nDisco + (objItem.Size / 2 ^ 30)
    Next
    'Espaço Total
    strDisco = FormatNumber(nDisco, 1) & " Gb"
    'Desktop ou Notebook?
    Set colItems = objWMIService.ExecQuery ("Select * from Win32_SystemEnclosure")
    For Each objItem In colItems
        strType = objItem.ChassisTypes(z)
    Next
    'Wscript.Echo "Teste " & strType
    If (strType = "1") OR (strType = "2") OR (strType = "3")  OR (strType = "4") OR (strType = "5") OR (strType = "6") OR (strType = "7") Then
        strTipo = "Desktop"    
        Else
            strTipo = "Notebook"
    End If


    'Funções e procedimentos --------------------------------------'

    'Arquivo Destino (MAC e IP)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile ("c:\TEMP\MACeIP\" & strComputer & ".txt", ForWriting, True)
    'Inclui registros do Inventário de Hardware
    objTextFile.WriteLine(strMAC & ";" & strIPAddress)

    'Arquivo Destino (Inventario - Não sobrescreve o arquivo)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile ("c:\TEMP\Inventario\" & strComputer & ".txt", ForAppending, True)
    'Inclui registros do Inventário de Hardware
    objTextFile.WriteLine(strUsuarioAD & ";" & strFullName & ";" & strComputer & ";" & strProcessador & ";" & strFrequenciaProcessador & ";" & strMemoria & ";" & strSistOper & ";"  & strTipo & ";" & strFabricante & ";"  & strModelo & ";"  & strSerialNumber & ";" & date & ";" & time)

    'Wscript.Echo "" & strIPAddress

    'Arquivo Destino (Inventario - Tecnofibras)
    If (strIPAddress >= "172.16.1.1") and (strIPAddress <= "172.20.1.1") Then
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set objTextFile = objFSO.OpenTextFile ("c:\TEMP\InventarioTSA\" & strComputer & ".txt", ForWriting, True)
      'Inclui registros do nome do usuario, tipo, modelo, numero serie, numero micro, processador, memoria, s.o.
      objTextFile.WriteLine(strFullName & ";" & strTipo & ";" & strFabricante & ";" & strModelo & ";" & strSerialNumber & ";" & strComputer & ";" & strProcessador & ";" & strMemoria & ";" & strSistOper)
    End If

    'Arquivo Destino (SO.txt no c:\lis)
    If objFSO.FolderExists("c:\lis") Then
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set objTextFile = objFSO.OpenTextFile ("c:\lis\so.txt", ForWriting, True)
      'Inclui registros do nome computador e usuario
      objTextFile.WriteLine(strComputer & ";" & strUsuarioAD)
    End If

    'Arquivo Destino (Existe Excel)
    If objFSO.FileExists("C:\Arquivos de programas\Microsoft Office\Office\excel.exe") OR objFSO.FileExists("C:\Arquivos de programas\Microsoft Office\Office12\excel.exe") Then
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set objTextFile = objFSO.OpenTextFile ("\\micruss\arquivos$\Excel\" & strComputer & ".txt", ForWriting, True)
      'Inclui registros do nome computador e usuario
      objTextFile.WriteLine(strComputer & ";" & strUsuarioAD)
      Else
        objFSO.DeleteFile "\\micruss\arquivos$\Excel\" & strComputer & ".txt", True
    End If

    'Arquivo Destino (InventarioDIA)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile ("c:\TEMP\InventarioDIA\" & strComputer & ".txt", ForWriting, True)
    'Inclui registros do Inventário de Hardware
    objTextFile.WriteLine(strUsuarioAD & ";" & strFullName & ";" & strComputer & ";" & strProcessador & ";" & strFrequenciaProcessador & ";" & strMemoria & ";" & strSistOper & ";" & date & ";" & time)

    'Arquivo Destino (Hardware)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile ("c:\TEMP\Hardware\" & strComputer & ".txt", ForWriting, True)
    'Inclui registros do Inventário de Hardware
    objTextFile.WriteLine(strComputer & ";" & strSerialNumber & ";" & strFabricante & ";" & strTipo & ";"  & strModelo)

    'Arquivo Destino (Usuario - Não sobrescreve o arquivo)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile ("c:\TEMP\Usuarios\" & strUsuarioAD & ".txt", ForAppending, True)
    'Inclui registros do Inventário de Hardware
    objTextFile.WriteLine(strUsuarioAD & ";" & strFullName & ";" & strComputer & ";" & strProcessador & ";" & strFrequenciaProcessador & ";" & strMemoria & ";" & strSistOper & ";" & date & ";" & time)

    'Arquivo Destino (Softwares Instalados - A escrita está mais abaixo, nao incluir nenhum linha abaixo dessas)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile ("c:\TEMP\software\" & strComputer & ".txt", ForWriting, True)

    'Obtem detalhes do REGISTRY do HOSTNAME local *** INVENTÁRIO DE SOFTWARE ***
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    'Acessa a chave de registro das aplicações instaladas na máquina em questão
    'e cria uma coleção com todas as linha existentes nela.
    strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    strMSIKey = "Installer\Products"
    objWMIService.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
    If Not IsNull(arrSubKeys) Then
        'Efetua varredura em cada linha da entrada de registro e verifica se é um SW válido.
        'KBxxxxxx, HotFix e entradas sem descrição serão ignoradas.
        For Each subKey In arrSubKeys
            softwareName = ""
            softwareVersion = ""
                publisher = ""
                releaseType = ""
                systemComponent = Empty
                parentDisplayName = ""
                  InstallDate = ""
            subkeyPath = strKeyPath & "\" & subKey
            'Obtém o nome da aplicação
            objWMIService.GetStringValue HKEY_LOCAL_MACHINE, subkeyPath, "DisplayName", softwareName
            'Obtém a versão da aplicação
            objWMIService.GetStringValue HKEY_LOCAL_MACHINE, subkeyPath, "DisplayVersion", softwareVersion
            'Se não foi possivel obter a versão da aplicação, tenta um segundo campo com esta informação
            If softwareVersion = "" Then
                intVer1 = ""
                intVer2 = ""
                objWMIService.GetDWORDValue HKEY_LOCAL_MACHINE, subkeyPath, "VersionMajor", intVer1
                objWMIService.GetDWORDValue HKEY_LOCAL_MACHINE, subkeyPath, "VersionMinor", intVer2
                If intVer1 <> "" Then softwareVersion = intVer1
                If intVer2 <> "" Then softwareVersion = softwareVersion & "." & intVer2
            End If
                'Obtém fabricante
                objWMIService.GetStringValue HKEY_LOCAL_MACHINE, subkeyPath, "Publisher", publisher
                'Obtém status de componente de aplicação
                objWMIService.GetDWORDValue HKEY_LOCAL_MACHINE, subkeyPath, "SystemComponent", systemComponent
                'Obtém tipo de release
                objWMIService.GetStringValue HKEY_LOCAL_MACHINE, subkeyPath, "ReleaseType", releaseType
                'Obtém nome da aplicação pai
                objWMIService.GetStringValue HKEY_LOCAL_MACHINE, subkeyPath, "ParentDisplayName", parentDisplayName
                'Obtém nome da aplicação pai
                objWMIService.GetStringValue HKEY_LOCAL_MACHINE, subkeyPath, "InstallDate", InstallDate
                If IsNull(releaseType) And (IsNull(systemComponent) Or systemComponent = 0) And IsNull(parentDisplayName) Then
                   If IsNull(softwareName) And Left(subKey, 1) = "{" And Right(subKey, 1) = "}" Then
                      objWMIService.GetStringValue HKEY_CLASSES_ROOT, strMSIKey & "\" & ConvertGuid(0, subKey), "ProductName", softwareName
                   End If
                   If Not IsNull(softwareName) Then
    '***************** Inventario de Software Instalados (escreve a linha)
                objTextFile.WriteLine(strComputer & ";" & softwareName & ";"  & strModelo & ";"  & strSerialNumber & ";"  & InstallDate)
                   End If
                End If
        Next
    End If
    Err.Clear
    objTextFile.Close
    WScript.Quit 0

    Function DateStringToDate(dtmDate)
        DateStringToDate = ""
        If IsDate(dtmDate) Then
            DateStringToDate = CDate(CStr(dtmDate))
        ElseIf Not IsNull(dtmDate) And dtmDate <> "" Then
            DateStringToDate = CDate(Left(dtmDate, 4) & "/" & Mid(dtmDate, 5, 2) & "/" & Mid(dtmDate, 7, 2))
        End If
    End Function

    Function ConvertGuid(iCodeIndex, sGuidCode)
        Dim aCode, iIndex, sSectionCode, sSectionDigits, sGuid, bAddHyphen
        
        bAddHyphen = True

        sGuid = sGuidCode
        
        iIndex = iCodeIndex
        If iIndex = 0 Then
            If InStr(sGuid, "-") Then bAddHyphen = False
        End If
        
        sGuid = ConvertCode(sGuid)
        sGuid = ConvertSection(iIndex, sGuid)
        ConvertGuid = sGuid
        
        aCode = Split(sGuid, "-")
        If iIndex = UBound(aCode) Then Exit Function
        
        sGuid = ConvertGuid(iIndex + 1, sGuid)
        
        If Not bAddHyphen Then sGuid = Join(Split(sGuid, "-"), "")
        If iIndex = 0 And bAddHyphen Then sGuid = "{" & sGuid & "}"
        
        ConvertGuid = sGuid

    End Function

    Function ConvertCode(sGuidCode)
        Dim aGuidSection

        If Left(sGuidCode, 1) = "{" Then sGuidCode = Replace(Replace(sGuidCode, "{", ""), "}", "")

        If InStr(sGuidCode, "-") Then
            aGuidSection = Split(sGuidCode, "-")
        Else
            ReDim aGuidSection(4)
            aGuidSection(0) = Left(sGuidCode, 8)
            aGuidSection(1) = Mid(sGuidCode, 9, 4)
            aGuidSection(2) = Mid(sGuidCode, 13, 4)
            aGuidSection(3) = Mid(sGuidCode, 17, 4)
            aGuidSection(4) = Right(sGuidCode, 12)
        End If

        ConvertCode = Join(aGuidSection, "-")

    End Function

    Function ConvertSection(iSectionIndex, sGuidCode)
        Dim aGuidSection, iIndex, sSectionDigits

        aGuidSection = Split(sGuidCode, "-")

        If iSectionIndex <= 2 Then aGuidSection(iSectionIndex) = StrReverse(aGuidSection(iSectionIndex))
        
        If iSectionIndex >= 3 Then
            For iIndex = 0 To Len(aGuidSection(iSectionIndex)) Step 2
                sSectionDigits = sSectionDigits & StrReverse(Right(Left(aGuidSection(iSectionIndex), iIndex), 2))
            Next
            aGuidSection(iSectionIndex) = sSectionDigits
        End If
        
        sGuidCode = Join(aGuidSection, "-")
        
        ConvertSection = sGuidCode

    End Function


    Thomas Edson Mattos Roeder
    • Marcado como Resposta Richard Juhasz terça-feira, 22 de março de 2011 19:31
    • Não Marcado como Resposta Dênis Júnio domingo, 10 de abril de 2011 02:42
    terça-feira, 15 de março de 2011 12:02
  • Denis segue o script.

     

    Vc pode colocar para rodar via GPO e mudar o local do relatorio para um arquivo compartilhado

     

    ---------------

    on error resume next
     
    Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
    Set objNetwork = CreateObject("Wscript.Network")
    strComputer = objNetwork.ComputerName
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.CreateTextFile("c:\" & strcomputer & ".txt", True)
     
    strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
    strEntry1a = "DisplayName"
    strEntry1b = "QuietDisplayName"
     
    Set objReg = GetObject("winmgmts://" & strComputer & _
     "/root/default:StdRegProv")
    objReg.EnumKey HKLM, strKey, arrSubkeys
     
    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
    objTextFile.WriteLine strValue1 & "¿ " & strcomputer & "¿"
      End If
    Next
     
    strKey2 = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
    strEntry2a = "DisplayName"
    strEntry2b = "QuietDisplayName"
     
    Set objReg = GetObject("winmgmts://" & strComputer & _
     "/root/default:StdRegProv")
    objReg.EnumKey HKLM, strKey2, arrSubkeys
     
    For Each strSubkey In arrSubkeys
      intRet2 = objReg.GetStringValue(HKLM, strKey2 & strSubkey, _
       strEntry2a, strValue2)
      If intRet2 <> 0 Then
        objReg.GetStringValue HKLM, strKey & strSubkey, _
         strEntry2b, strValue2
      End If
      If strValue2 <> "" Then
    objTextFile.WriteLine strValue2 & "¿ " & strcomputer & "¿"
      End If
    Next
     
    objTextFile.Close


    David Dellacenta http://https://daviddellacenta.wordpress.com||
    • Marcado como Resposta Richard Juhasz terça-feira, 22 de março de 2011 19:31
    • Não Marcado como Resposta Dênis Júnio domingo, 10 de abril de 2011 02:42
    sexta-feira, 18 de março de 2011 17:01
  • Solução

    Utilizamos o MAP (Microsoft Assessment and Planning), que ajudou com a plataforma microsoft e o System Center Manager 2007.

    Att.

    • Marcado como Resposta Dênis Júnio domingo, 10 de abril de 2011 02:53
    domingo, 10 de abril de 2011 02:52