none
Valida antivirus RRS feed

  • Pergunta

  • Ba galera

    Alguem ja montou um script que verifica a versão do McAfee, e se a versão não fo XYZ ele retorna uma mensagem para o usuario sua versão esta desatualizada, e se caso estiver a versão correta ele retorna seu antivirus esta ok, a versao do antivirus ele teria que ler em um arquivo externo, um txt quem sabe.

     

    valeu galera.


    • Editado Marcelo TI quinta-feira, 22 de setembro de 2011 23:08 correcao
    quinta-feira, 22 de setembro de 2011 22:03

Respostas

  • Mais uma tentativa

     

    if (cint(Linha1) <> cint(strid)) or (cstr(Linha2) <> cstr(strid2)) then

     

    O que eu fiz:

    cint convert a variavel em tipo inteiro

    Cstr converte a variavel em tipo string

    Isto é na hora de comparar teremos certeza que as comparações envolvem o mesmo tipo. Se vc quiser confirmar o resultado desta alteração utilize estas funções naquela linha que te passei (aquela que exibe os valores e tamanhos).

     


    Fábio de Paula Junior
    • Marcado como Resposta Marcelo TI quinta-feira, 29 de setembro de 2011 15:33
    quinta-feira, 29 de setembro de 2011 00:26
    Moderador

Todas as Respostas

  • Marcelo,

    Não conheço o McAfee mas provavelmente ele deve ter um executavel que sempre é atualizado quando muda de versão.

    Fiz um exemplo que verifica a versão do Notepad, adapte a sua necessidade.

     

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    if objFSO.GetFileVersion("C:\Windows\System32\notepad.exe") <> "6.1.7600.16390" then
    	msgbox "Sua verão do Software é inferior a recomendada" & chr(10) & "Sua Versão é a " _
    		& objFSO.GetFileVersion("C:\Windows\System32\notepad.exe"),,"Suporte Técnico"
    end if
    


    Fábio de Paula Junior
    sexta-feira, 23 de setembro de 2011 19:05
    Moderador
  • Grande Fabio Tche.

    Como vai..

    Show a logica é por ai mais como eu faço para que ele funcione com estes 4 prontos.

    1 - A versão do antivirus, ele tem que ler uma chave de registro (HKEY_LOCAL_MACHINE\SOFTWARE\Mcafee\AvEngine\AVDatVersion)

    2 - Compare o valor desta chave com o valor cadastrado em um txt.

    3 - Se OK, ele retorna a fraze, seu antivirus esta ok, se não, ele retorna a mensagem, seu antivirus não esta atualizado entre encontato com o suporte!!!

    4 - Ele grave as informações em um arquivo de log apresentando a informação ( versão, usuario logado, nome da maquina, resposta dada ao usuario pelo item 3)

     

    Obrigado tche. 

     

    sexta-feira, 23 de setembro de 2011 21:28
  • Marcelo,
    Vou te passar algumas funções que podem auxiliar na construção do script, escreva algo e se tiver alguma dificuldade poste o que vc já escreveu.
    ' ===============  FUNÇÕES E SUBS ==================
    
    Function ReadReg(RegPath)
          Dim objRegistry, Key
          Set objRegistry = CreateObject("Wscript.shell")
    
          Key = objRegistry.RegRead(RegPath)
          ReadReg = Key
    End Function
    
    Sub Grava_Log(strArquivo,strMsg)
    
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	Set objTextFile = objFSO.OpenTextFile(strArquivo, ForAppending, True)
       
        objTextFile.WriteLine(strMsg)
    
    	objTextFile.Close
    	
    end sub
    

    A primeira função retorna o valor de uma chave de registro, vc pode utilizar assim
    strVersaoMcAfeeEstacao = ReadReg("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatVersion")
    E a sub grava log em um arquivo, exemplo
    Grava_Log "\\server\share\mcafee.log", strVersaoMcAfeeEstacao & ";" & strUsuario & ";" & strComputer & ";" & "ERRO"
    

    Veja que são dois parametro: 1) Nome do arquivo de Log ; 2) Linha que será escrita.
     

    Fábio de Paula Junior
    sexta-feira, 23 de setembro de 2011 22:21
    Moderador
  • Marcelo,

    Uma das vantagens de utilizar Subs e Functions é evitar a repetição de código, você duplicou o GravaLog e modificou de forma não "ortodoxa" a function.

    vamos corrigir a function primeiro:

    1)coloque o código da function como eu havia lhe passado antes.

    2) Se vc precisar ler dois valores do registro faça assim:

    strid = ReadReg("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatVersion")
    strid2 = ReadReg ("HKLM\SOFTWARE\Mcafee\AvEngine\Version")
    
    
    

    Vc havia colocado váriaveis dentro da função sendo que o certo é passar como parametro.

    Veja se vc consegue deduzir o que precisa ser feito na Sub Grava_Log (que também já estava correta).

    Desculpe se não te dou a resposta completa mas prefiro te ensinar a pescar do que entregar o peixe.

     

     


    Fábio de Paula Junior
    sábado, 24 de setembro de 2011 23:18
    Moderador
  • Está melhorando.

    algumas observações:

    1) coloque as funçoes e subs no final do script, fica mais organizado, vc pode chamar as funçoes\sub antes sem problemas. IMPORTANTE: somente colocar o código da função\sub no código não adianta nada, vc tem que chamá-las em algum momento, veja que a Reg_Read funcionou, mas vc criou duas Grava_Logs e nenhuma surtiu efeito (porque vc não chamou elas em lugar algum do seu código).

    2)Vc ainda não voltou com o Grava_Log

    3) Vc colocou um código para criar o arquivo de log (Set ArqLog = FSO.OpenTextFile(strLog, 8, True, 0)
    ) não precisava, dentro da Grava_Log ele já cria o arquivo de log se necessário.

    Para gravar uma linha no arquivo de log vc somente precisa chamar a sub passando dois parametro: arquivo e conteudo da linha, Exemplo:

    Grava_Log "c:\Macfee_log.txt", "CERTO"


    Fábio de Paula Junior
    domingo, 25 de setembro de 2011 23:03
    Moderador
  • Marcelo,

    Fiz duas alterações:

    1)Coloquei a função por ultimo (só para organizar)

    2)Tirei a lógica de comparar versões de dentro do laço DO UNTIL, e dentro dele apenas fiz a leitura do arquivo, agora quando sai do DO UNTIL vc tem as variaveis Linha1 e Linha2 com os valores contidos no TXT.

    Só falta vc fazer a lógica com ela agora.

    Dim Username, oNetwork, objShell, objLink, Linhas
    Dim FSO, objFSO, strid, strLine
     
    Set oNetwork = createObject("wscript.network") 
    Set objShell = CreateObject("WScript.Shell")
       
    Username = "" 
    While Username = "" 
    	Err.Clear: Username = oNetwork.username 
    	If Err Then WScript.Sleep 10 
    Wend 
    On Error Goto 0
      
    Const OverwriteExisting = True
      
    strCaminho = "c:\arquivo.txt"
    strcomputer = oNetwork.ComputerName
     
    Set ADconn = CreateObject("ADSystemInfo")
    Set CurrentUser = GetObject("LDAP://" & ADconn.UserName) 
     
    strid = ReadReg ("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatDate")
      
    Set FSO = createobject("scripting.filesystemobject")
    Set objTextFile = FSO.opentextfile(strCaminho,1)
     
    'On Error Resume Next
     
    Do Until objTextFile.AtEndOfStream
         Linha1 = objTextFile.Readline
         Linha2 = objTextFile.Readline
    Loop
     
     
    if Linha1 = strid Then
    	strMsg1 = MsgBox ("Sua versão do Software é recomendada" & chr(10) & "Suporte Técnico" )
     Else
    	strMsg2 = MsgBox ("Sua versão do Software é inferior a recomendada" & chr(10) & "Sua versão é",,"Suporte Técnico")
    end if
    
    strdatversao = ReadReg("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatVersion")
    strproduto = ReadReg("HKLM\SOFTWARE\Mcafee\DesktopProtection\Product")
    strprodutover = ReadReg("HKLM\SOFTWARE\Mcafee\DesktopProtection\szProductVer")
    strFullName = currentuser.displayname
    
    strArquivo = "c:\"& strcomputer &".txt"
     
    'Escrita
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile(strArquivo,  8, True, 0)
    
    objTextFile.WriteLine ( Now & " | " & strFullName & " | " & oNetwork.username & " | " & strid & " | " & strdatversao & " | " & strproduto & " | " & strprodutover )
    
    objTextFile.Close 
    
    'Subs e Functions por último
    
    Function ReadReg(RegPath)
    	Dim objRegistry, Key
    	Set objRegistry = CreateObject("Wscript.shell")
    
    	Key = objRegistry.RegRead(RegPath)
    	ReadReg = Key
    End Function
    

    Cada vez que vc usa o comando objTextFile.Readline o script lê uma linha do txt. Da forma que fiz o txt deve ter no máximo duas linha senão vai dar erro.


    Fábio de Paula Junior
    segunda-feira, 26 de setembro de 2011 11:40
    Moderador
  • Será que não dá pra fazer somente com um IF?

    Em português claro: Se ( Linha1 for diferente de strid ) OU ( Linha2 diferente de strid ) então programa desatualizado.

    Em vbscript:

    Dim Username, oNetwork, objShell, objLink, Linhas
     Dim FSO, objFSO, strid, strLine
      
     Set oNetwork = createObject("wscript.network") 
     Set objShell = CreateObject("WScript.Shell")
        
     Username = "" 
     While Username = "" 
         Err.Clear: Username = oNetwork.username 
         If Err Then WScript.Sleep 10 
     Wend 
     On Error Goto 0
       
     Const OverwriteExisting = True
       
     strCaminho = "c:\arquivo.txt"
     strcomputer = oNetwork.ComputerName
      
     Set ADconn = CreateObject("ADSystemInfo")
     Set CurrentUser = GetObject("LDAP://" & ADconn.UserName) 
      
     strid = ReadReg ("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatDate")
     strid2 = ReadReg("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatVersion")
       
     Set FSO = createobject("scripting.filesystemobject")
     Set objTextFile = FSO.opentextfile(strCaminho,1)
      
     'On Error Resume Next
      
     Do Until objTextFile.AtEndOfStream
          Linha1 = objTextFile.Readline
          Linha2 = objTextFile.Readline
     Loop
     
     if (Linha1 <> strid) OR (Linha2 <> strid) then
    	strMsg2 = MsgBox ("Sua versão do Software é inferior a recomendada" & chr(10) & "Sua versão é",,"Suporte Técnico")
     else
    	strMsg1 = MsgBox ("Sua versão do Software é recomendada" & chr(10) & "Suporte Técnico" )
     end if
       
     
    
    strproduto = ReadReg("HKLM\SOFTWARE\Mcafee\DesktopProtection\Product")
    strprodutover = ReadReg("HKLM\SOFTWARE\Mcafee\DesktopProtection\szProductVer")
    strFullName = currentuser.displayname
     
    strArquivo = "c:\"& strcomputer &".txt"
      
     'Escrita
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     Set objTextFile = objFSO.OpenTextFile(strArquivo,  8, True, 0)
     
    objTextFile.WriteLine ( Now & " | " & strFullName & " | " & oNetwork.username & " | " & strid & " | " & strid2 & " | " & strproduto & " | " & strprodutover )
     
    objTextFile.Close 
     
    'Subs e Functions por último
     
    Function ReadReg(RegPath)
         Dim objRegistry, Key
         Set objRegistry = CreateObject("Wscript.shell")
     
        Key = objRegistry.RegRead(RegPath)
         ReadReg = Key
     End Function
     
    

     


    Fábio de Paula Junior
    segunda-feira, 26 de setembro de 2011 16:14
    Moderador
  • Fabio

    Show tche compreendi, ta indo de boa só esta parando caso o valor consultado no registro seja um reg_dword, para memoria esta ate jogando o valor correto em decimal, mais mesmo assim ele nao consegue bater o valor coletado com o do txt, alguma coisa a mas tem que ser feita ou este tipo de verificação so funciona com chave reg_sz tche.

    obrigado.

    segunda-feira, 26 de setembro de 2011 21:47
  • Cole aqui o conteúdo do arquivo de configuração e um export das chaves de registro que eu verifico para você.

     


    Fábio de Paula Junior
    segunda-feira, 26 de setembro de 2011 23:32
    Moderador
  • Fabio

    Segue tche.

    dados do txt

    2011/09/25
    6480

    registro

    REGEDIT4

    [HKEY_LOCAL_MACHINE\SOFTWARE\McAfee\AVEngine]
    "AVDatVersion"=dword:00001950
    "AVDatDate"="2011/09/25"

    Fabio colocando o wscript.echo usando o strid da chave dword ele retorna o valor decimal que é 6480.

    abraço.

    segunda-feira, 26 de setembro de 2011 23:43
  • Acho que sei qual é o problema.

    Em qual linha é gerado o erro ou não funciona da maneira que vc esperava?


    Fábio de Paula Junior
    terça-feira, 27 de setembro de 2011 11:29
    Moderador
  • Ba Fabio

    Ele não apresenta erro, ele só diz que a versão esta errada, ou seja a segunda mensagem é apresentada, ai coloquei o echo para saber se o valor colhido ésta certo para saber se deveria colocar em decimal ou em hex no arquivo txt, e para o echo ele devolve o valor decimal, mais mesmo este valor estando no txt, ele retorna a mensagem de versão desatualizada.

    terça-feira, 27 de setembro de 2011 14:00
  • Acrescentei a função TRIM em algumas linhas.(onde vc recupera a informções do registro e onde lê o arquivo texto)

    A Função TRIM retira espaços em branco no inicio e final de uma string.

     Faça o Teste...

     

    Dim Username, oNetwork, objShell, objLink, Linhas
    Dim FSO, objFSO, strid, strLine
      
     Set oNetwork = createObject("wscript.network") 
     Set objShell = CreateObject("WScript.Shell")
        
     Username = "" 
     While Username = "" 
         Err.Clear: Username = oNetwork.username 
         If Err Then WScript.Sleep 10 
     Wend 
     On Error Goto 0
       
     Const OverwriteExisting = True
       
     strCaminho = "c:\arquivo.txt"
     strcomputer = oNetwork.ComputerName
      
     Set ADconn = CreateObject("ADSystemInfo")
     Set CurrentUser = GetObject("LDAP://" & ADconn.UserName) 
      
    strid = trim(ReadReg ("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatDate"))
    strid2 = trim(ReadReg("HKLM\SOFTWARE\Mcafee\AvEngine\AVDatVersion"))
       
    Set FSO = createobject("scripting.filesystemobject")
    Set objTextFile = FSO.opentextfile(strCaminho,1)
      
    'On Error Resume Next
    
    Do Until objTextFile.AtEndOfStream
    	Linha1 = trim(objTextFile.Readline)
    	Linha2 = trim(objTextFile.Readline)
    Loop
     
     if (Linha1 <> strid) OR (Linha2 <> strid) then
    	strMsg2 = MsgBox ("Sua versão do Software é inferior a recomendada" & chr(10) & "Sua versão é",,"Suporte Técnico")
     else
    	strMsg1 = MsgBox ("Sua versão do Software é recomendada" & chr(10) & "Suporte Técnico" )
     end if
       
     
    
    strproduto = ReadReg("HKLM\SOFTWARE\Mcafee\DesktopProtection\Product")
    strprodutover = ReadReg("HKLM\SOFTWARE\Mcafee\DesktopProtection\szProductVer")
    strFullName = currentuser.displayname
     
    strArquivo = "c:\"& strcomputer &".txt"
      
     'Escrita
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     Set objTextFile = objFSO.OpenTextFile(strArquivo,  8, True, 0)
     
    objTextFile.WriteLine ( Now & " | " & strFullName & " | " & oNetwork.username & " | " & strid & " | " & strid2 & " | " & strproduto & " | " & strprodutover )
     
    objTextFile.Close 
     
    'Subs e Functions por último
     
    Function ReadReg(RegPath)
         Dim objRegistry, Key
         Set objRegistry = CreateObject("Wscript.shell")
     
        Key = objRegistry.RegRead(RegPath)
         ReadReg = Key
     End Function
     
    
    


    Fábio de Paula Junior
    terça-feira, 27 de setembro de 2011 14:08
    Moderador
  • Ba Fabião show esta função mais uma pro aprendizado.

    mas nao rolou não.

    terça-feira, 27 de setembro de 2011 16:03
  • Estranho sua comparação

    Linha1 <> strID (Linha1 é uma data e strID é uma data) OK

    Linha2 <> strid (Linha2 é um número (ex: 6480) e strid continua sendo uma data) nunca vai funcionar direito

    Reveja a lógica do script. Acho que não tem mais problemas.

     


    Fábio de Paula Junior
    terça-feira, 27 de setembro de 2011 16:10
    Moderador
  • Marcelo,

    Percebeu algum erro na linha 

    if (Linha1 <> strid) OR (Linha2 <> strid) then ?


    Fábio de Paula Junior
    quarta-feira, 28 de setembro de 2011 15:11
    Moderador
  • Ba Fabião boa tarde

    o erro na linha é

    if (Linha1 <> strid) or (Linha2 <> strid2) then

    e mesmo assim ele da o erro, estou buscando valores sz que me ajude neste esta questão de estar atualizado ou nao pois com a chave dword nao esta funfando nao tche.

    quarta-feira, 28 de setembro de 2011 16:32
  • Insira o código abaixo antes do IF (Linha1 <> ...

    E poste aqui o resultado dele

    wscript.echo "Valor Linha1=" & Linha1 & chr(10) & _
        "Tam.  Linha1=" & len(Linha1) & chr(10) & _
        "Valor strid =" & strid  & chr(10) & _
        "Tam.  strid =" & len(strid) & chr(10) & _
        "Valor Linha2=" & Linha2  & chr(10) & _
        "Tam.  Linha2=" & len(Linha2) & chr(10) & _
        "Valor strid2=" & strid2  & chr(10) & _
        "Tam.  strid2=" & len(strid2)

    Ele vai informa o conteudo de cada variavel e o tamanho delas.


    Fábio de Paula Junior
    quarta-feira, 28 de setembro de 2011 17:07
    Moderador
  • Fabio

    Segue tche

    Valor Linha1=6482
    Tam.  Linha1=4
    Valor strid =6482
    Tam.  strid =4
    Valor Linha2=2011/09/27
    Tam.  Linha2=10
    Valor strid2=2011/09/27
    Tam.  strid2=10

    ***** script completed - exit code: 0 *****

    quarta-feira, 28 de setembro de 2011 17:45
  • Em seguida ele exibiu a mensagem abaixo?

    Sua versão do Software é recomendada
    Suporte Técnico


    Fábio de Paula Junior
    quarta-feira, 28 de setembro de 2011 17:56
    Moderador
  • Não Fabiao, ele retornor

    Sua versão do software é inferior a recomendada
    Sua versão é
    Suporte Técnico

    quarta-feira, 28 de setembro de 2011 20:35
  • Mais uma tentativa

     

    if (cint(Linha1) <> cint(strid)) or (cstr(Linha2) <> cstr(strid2)) then

     

    O que eu fiz:

    cint convert a variavel em tipo inteiro

    Cstr converte a variavel em tipo string

    Isto é na hora de comparar teremos certeza que as comparações envolvem o mesmo tipo. Se vc quiser confirmar o resultado desta alteração utilize estas funções naquela linha que te passei (aquela que exibe os valores e tamanhos).

     


    Fábio de Paula Junior
    • Marcado como Resposta Marcelo TI quinta-feira, 29 de setembro de 2011 15:33
    quinta-feira, 29 de setembro de 2011 00:26
    Moderador
  • Ba Fabio show velho rolou, maneiro estas funções locas tb muito bom, obrigado mais uma vez valeu.
    quinta-feira, 29 de setembro de 2011 15:32