none
Coleta de Informações para Debugar erros RRS feed

  • Pergunta

  • Ba Galera, Boa Noite.

     

    Estou eu aqui apresentando uma mutação de um script que o grande amigo Jesiel me passou, ele é direcionado para geração de log`s para ajudar a realizar um diagnostico de possíveis problemas de conexão e aplicação de políticas, e ate mesmo problemas de logon na rede.

     

    Da forma que ele esta, eu consigo gerar um arquivo para cada coleta, porem eu gostaria de gerar os log`s de forma mais inteligente, vou quebrar o mesmo por chamadas, com as alterações que eu gostaria que ocorre-se.

     

    BA tche vamos la então.

     

    (Criar a pasta com o nome da estação e não como estou criando)

    '========Cria Estrutura============================================

    set FSO = createobject("scripting.filesystemobject")

    set shell = createobject("wscript.shell")

                if fso.folderexists("C:\logtst\") = false then

                set objfolder = fso.createfolder("C:\logtst\")

    End If

                if fso.folderexists("C:\logtst\str\") = false then

                set objfolder = fso.createfolder("C:\logtst\str\")

    End If

     

    '========Coleta Informações========================================

    Dim strLogDir

    Dim strCompName

    Dim strUserName

    Dim site

    strComputer = "."

     

    Set WshShell = WScript.CreateObject("WScript.Shell")

    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem")

    Set colProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")

    Set colDiskDrives = objWMIService.ExecQuery ("Select * from Win32_DiskDrive")

    Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set colSoftware = objWMIService.ExecQuery("Select * from Win32_Product")

    Set IPConfigSet = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

        strCompName = WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

        strUserName  = WshShell.ExpandEnvironmentStrings("%USERNAME%")

        strLogDir = "C:\logtst\"

        Set objFSO = CreateObject("Scripting.FileSystemObject")

        Set objTextFile = objFSO.CreateTextFile(strLogDir & "\" & strCompName & ".log", True)

        objTextFile.WriteLine "************ Informações do SO Iniciado em " & Date & " ************ "

                objTextFile.WriteLine ""

            objTextFile.WriteLine "Nome do Computador: " & strCompName

                objTextFile.WriteLine ""

     

        'Sistema Operacional

                DIM OSNome

                For Each objOS in colOSes

                For Each objItem in colItems

                            objTextFile.WriteLine ""

            objTextFile.WriteLine "Sistema Operacional: " & objOS.Caption 'Name

                            OSNome = objOS.Caption

            objTextFile.WriteLine "Versão: " & objOS.Version 'Version & build

            objTextFile.WriteLine "Numero do Build: " & objOS.BuildNumber 'Build

            objTextFile.WriteLine "Tipo do Build: " & objOS.BuildType

            objTextFile.WriteLine "Service Pack: " & objOS.ServicePackMajorVersion & "." & objOS.ServicePackMinorVersion

                objTextFile.WriteLine "Registrado Para: " & objOS.RegisteredUser

                objTextFile.WriteLine "Organização: " & objOS.Organization

                objTextFile.WriteLine "Dominio: " & objItem.Domain

        Next

     

    '========Array de Coleta 1=========================================

    Dim WSHShell

     

    Set WSHShell = WScript.CreateObject("WScript.Shell")

    Set objNetwork = CreateObject("Wscript.Network")

     

    strUsuario = objNetwork.Username

    strComputador = objNetwork.ComputerName

    strPing            =          "tstping"

    strDC1                        =          " Servidor1"

    strDC2                        =          " Servidor2"

    strGpudate                  =          "Gpudate"

    strGpresult                  =          "Gpresult"

    strPortTCP53              =          "TCP53"

    strPortUDP53             =          "UDP53"

    strPortTCP88              =          "TCP88"

    strPortUDP88             =          "UDP88"

    strLog  = "C:\logtst\"

    strLog1           = "C:\logtst\str\"

     

    ( Primeira alteração, aqui eu crio um arquivo por servidor ou seja nesse ponto eu gostaria que ele cria-se um arquivo chamado TSTNivel1.log, e nele gravar as informações, separados por *****************, ou seja ele gravara o servidor1 ai cria uma linha de ********************* e depois grava as informações do servidor2)

    '========Teste de Conectividade Nivel 1================================

    WSHShell.Run "cmd /c ping.exe Servidor1 > " & strLog1 & "\" & strPing & "-" & strDC1 & ".txt", 3, true

    WSHShell.Run "cmd /c ping.exe Servidor2 > " & strLog1 & "\" & strPing & "-" & strDC2 & ".txt", 3, true

     

    ( Segunda alteração, aqui eu crio um arquivo por servidor ou seja nesse ponto eu gostaria que ele cria-se um arquivo chamado TSTNivel2.log, e nele gravar as informações, separados por *****************, ou seja ele gravara o servidor1 ai cria uma linha de ********************* e depois grava as informações do servidor2)

    '========Teste de Conectividade Nivel 2================================

    WSHShell.Run "cmd /c pathping.exe Servidor1 > " & strLog1 & "\" & strPing & "-" & strDC1 & ".txt", 3, true

    WSHShell.Run "cmd /c pathping.exe Servidor2 > " & strLog1 & "\" & strPing & "-" & strDC2 & ".txt", 3, true

     

    ( Terceira alteração, aqui eu crio um arquivo por servidor ou seja nesse ponto eu gostaria que ele cria-se um arquivo chamado TSTNivel3.log, e nele gravar as informações, separados por *****************, ou seja ele gravara o servidor1 ai cria uma linha de ********************* e depois grava as informações do servidor2)

    '========Teste de Conectividade Nivel 3================================

    WSHShell.Run "cmd /c ping.exe 192.168.100.1 > " & strLog1 & "\" & strPing & "-" & strDC1 & ".txt", 3, true

    WSHShell.Run "cmd /c ping.exe 192.168.100.1 > " & strLog1 & "\" & strPing & "-" & strDC2 & ".txt", 3, true

     

    ( Quarta alteração, aqui eu crio um arquivo por servidor ou seja nesse ponto eu gostaria que ele cria-se um arquivo chamado TSTNivel4.log, e nele gravar as informações, separados por *****************, ou seja ele gravara o servidor1 ai cria uma linha de ********************* e depois grava as informações do servidor2)

    '========Teste de Conectividade Nivel 4================================

    WSHShell.Run "cmd /c portqry -n Servidor1 -e 53 -p TCP -i > " & strLog1 & "\" & strPortTCP53 & "-" & strDC1 & ".txt", 3, true

    WSHShell.Run "cmd /c portqry -n Servidor1 -e 53 -p UDP -i > " & strLog1 & "\" & strPortUDP53 & "-" & strDC1 & ".txt", 3, true

    WSHShell.Run "cmd /c portqry -n Servidor1 -e 88 -p TCP -i > " & strLog1 & "\" & strPortTCP88 & "-" & strDC1 & ".txt", 3, true

    WSHShell.Run "cmd /c portqry -n Servidor1 -e 88 -p UDP -i > " & strLog1 & "\" & strPortUDP88 & "-" & strDC1 & ".txt", 3, true

    WSHShell.Run "cmd /c portqry -n Servidor2 -e 53 -p TCP -i > " & strLog1 & "\" & strPortTCP53 & "-" & strDC2 & ".txt", 3, true

    WSHShell.Run "cmd /c portqry -n Servidor2 -e 53 -p UDP -i > " & strLog1 & "\" & strPortUDP53 & "-" & strDC2 & ".txt", 3, true

    WSHShell.Run "cmd /c portqry -n Servidor2 -e 88 -p TCP -i > " & strLog1 & "\" & strPortTCP88 & "-" & strDC2 & ".txt", 3, true

    WSHShell.Run "cmd /c portqry -n Servidor2 -e 88 -p UDP -i > " & strLog1 & "\" & strPortUDP88 & "-" & strDC2 & ".txt", 3, true

     

    '========Força Aplicação da GPO====================================

    WSHShell.Run "cmd /c gpupdate.exe /force > " & strLog & "\" & strComputador & "-" & strUsuario & "-" & strGpudate & ".txt", 3, true

     

    '========Coleta das Informações RSOP================================

    WSHShell.Run "cmd /c gpresult.exe /Z > " & strLog & "\" & strComputador & "-" & strUsuario & "-" & strGpresult & ".txt", 3, true

     

    (Agora antes de finalizar o scritp, eu gostaria de gerar um log de conexão telnet, que acho o ponto que deve ser mais difícil, o que eu gostaria nesse log: O mesmo teria o nome TSTNivel5.log, e seria executado o comando telnet para cada um dos dois servidores, nas portas x, y, z e grave no arquivo de log se a conexão foi fechada com sucesso ou a conexão não foi fechada)

     

    Set WSHShell = Nothing

    MsgBox("Geração dos Log's Finalizado")

    Next

    WScript.Quit(0)

     

    Ba galera, tentei ate usar o objTextFile.WriteLine, mais Ba tche só da erro não estou compreendendo o pq.

    E tem mais um detalhe galera, como posso fazer para que o script utilize um executavel remoto, tipo assim o portqry nao vai estar local nas estaçoes quando for realizado a coleta dos log`s, ai entra a questão, como eu posso fazer para que o script rode um executavel atraz de um caminho UNC, obs, esse caminho UNC, nunca estará mapeado na estaçao o mesmo so podera ser acessado por \\server\compartilhamento..

    Valeu Galera.

    • Editado Marcelo TI terça-feira, 4 de agosto de 2009 00:41
    segunda-feira, 3 de agosto de 2009 23:37

Respostas

  • Olá,

    Então... substitua os valores:

    strLog      = "C:\logtst\"

    strLog1    = "C:\logtst\str\"



    Por estes:

    strLog      = strPasta

    strLog1    = strPasta & "\str\"



    Sendo que strPasta são os valores do post que eu te passei para criar a pasta com o nome do computador.


    Sobre o telnet. Recomendo abrir um outro post para tentarmos centralizar neste problema.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    • Marcado como Resposta Marcelo TI quarta-feira, 5 de agosto de 2009 17:02
    quarta-feira, 5 de agosto de 2009 00:09

Todas as Respostas

  • Olá,

    Marcelo, altere conforme o exemplo abaixo:


    '========Teste de Conectividade Nivel 1================================


    WSHShell.Run "cmd /c ping.exe servidor1 >>"  & strLog1 & "\TSTNivel1.txt", 3, true
    WSHShell.Run "cmd /c echo *************************************************>>"  & strLog1 & "\TSTNivel1.txt", 3, true
    WSHShell.Run "cmd /c ping.exe servidor2 >>"  & strLog1 & "\TSTNivel1.txt", 3, true

    Utilizei o caracter ">>" e para criar a linha utilizei o echo
    Basta fazer o mesmo nos outros.


    Quanto ao portqry. Verifique o comando netstat (padrão do windows). Acredito que ele te atende.

    Entre no prompt e digite:

    netstat -an | find /i ":53"
    O comando lista o status da porta 53.
    Ou digite: netstat -an
    Maiores informações, digite netstat /?



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    terça-feira, 4 de agosto de 2009 13:10
  • Ba Jesiel

    Boa Tarde.

    Show de bola, rolou a questão do arquivo unico e ja repasse para os outros obrigado.

    Agora sobre a questão do netstat, ele não me atenderia pois necessito saber se a estação consegue chegar no servidor e ver se o servidor esta com as portas abertas, vc acha que é possivel fazer ele ler o executavel em um ponto na rede via UNC.

    Sobre a questão da criação da estrutura, vc tem alguma ideia de como criar uma pasta tendo como nome o nome da estação na qual o vbs será rodado.?

    Sobre a questão do telnet, vc acha que é possivel, gerar um log com sim e nao para esse tipo de conexão ?


    Obrigado mais uma vez grande amigo.
    terça-feira, 4 de agosto de 2009 17:59
  • Olá,

    Você consegue executar usando o caminho UNC sim...

    Exemplo:

    ' Abrir normal
    WSHShell.Run "\\server\compartilhamento\arquivo.exe", 3, true


    Criação de estrutura, você se refere à pasta que o script cria no inicio??? Se sim, utilize a estrutura abaixo:

    '========Cria Estrutura============================================
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    set FSO = createobject("scripting.filesystemobject")
    set shell = createobject("wscript.shell")
    computador = UCASE(WshNetwork.ComputerName)
    strpasta = "C:\" & computador

    if fso.folderexists(strPasta ) = false then
                set objfolder = fso.createfolder(strPasta)
    End If
                if fso.folderexists(strPasta & "\str\") = false then
                set objfolder = fso.createfolder(strPasta & "\str\")
    End If
     '========Coleta Informações========================================


    Quanto à questão do telnet, não entendi muito bem!!! verifica se a conexão foi fechada?? Você diz se consegue fazer a conexão ou se abre a conexão e fecha normalmente???


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    terça-feira, 4 de agosto de 2009 18:22
  • Ba Jesiel

    Vou fazer o teste agora do UNC, eu ja estava ate pensando em facilitar, eu ja estava escrendo algo para fazer ele copiar o EXE para a estação, mais vou testar e te falo.

    Sobre a criação do diretorio tb vou fazer um teste e ja te informo.

    Sobre o telnet, o que quero é gerar um log que me informe se a estação conseguiu fechar a conexao telnet contra o servidor na porta 53 por exemplo, e se caso nao ele jogue a informação no log que nao conseguiu e se caso conseguiu ele grave no log consegui por exemplo.

     

    Abraço.

    Obrigado.

    terça-feira, 4 de agosto de 2009 18:34
  • Ba Jesiel.

    Show, matamos a questão do UNC rodou legal.

    Matamos tb a criaçao da pasta so que gerou um problema hehehe nao tinha pensado nisso, mais deve ter uma soluçao heheh,
    Como vc viu, eu quero criar pastas abaixo da principal, para que cada conjunto de log caia na sua pasta, da forma que eu tinha montado o array era so eu colocar strlog, strlog1, strlog2 e assim vai sendo que cada strlog, estava apontando para cada sub-pasta, como posso fazer agora ?

     

    Sobre a questão do telnet vc compreendeu a questão ?

    terça-feira, 4 de agosto de 2009 23:43
  • Olá,

    Então... substitua os valores:

    strLog      = "C:\logtst\"

    strLog1    = "C:\logtst\str\"



    Por estes:

    strLog      = strPasta

    strLog1    = strPasta & "\str\"



    Sendo que strPasta são os valores do post que eu te passei para criar a pasta com o nome do computador.


    Sobre o telnet. Recomendo abrir um outro post para tentarmos centralizar neste problema.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    • Marcado como Resposta Marcelo TI quarta-feira, 5 de agosto de 2009 17:02
    quarta-feira, 5 de agosto de 2009 00:09
  • Boa tarde Jesiel.

    Ba cara bele rolou legal valeu.

    Vou abrir o outro.

    quarta-feira, 5 de agosto de 2009 16:57
  • Ba Jesiel

    Mais uma vez obrigado, o outro post ta aberto com a questao do telnet

     

    Abraço.

    quarta-feira, 5 de agosto de 2009 20:10