none
Scritp que cria log apos a execuçao. RRS feed

  • Pergunta

  • Pessoal

    Boa noite.

    Como mudar a saida e verificaçao desse scritp muito legal que o Jesiel me passou, gostaria que a saida dele fosse com o logon do usuario no nome do arquivo, e que o mesmo verifica-se o nome do usuario para saber se ele executa novamente ou nao, tipo assim da forma que ele esta, ele cria o log com o nome da estaçao, e se caso o log existir, ele nao roda novamente, gostaria que o log tivesse o nome do usuario, e se caso esse usuario realize logon na maquina ele nao rode e se caso outro usuario realize logon na mesma maquina, ele execute o scritp e gere outro log com o nome do outro usuario.

    Abraço para todos.

    No aguardo.


    Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns
    Dim intConstants, intTimeout, strTitle, intCount, blnLog
    Dim strUserName, strComputerName, strIP, strShare, strLogFile

    strShare = "C:\"

    intTimeout = 20

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objNetwork = CreateObject("Wscript.Network")
    Set objShell = CreateObject("Wscript.Shell")

    strUserName = objNetwork.Username
    strLogFile = objNetWork.Computername & ".txt"
    strComputerName = objNetwork.ComputerName
    strIP =  GetIPAddresses 'Join(GetIPAddresses())

    If (objFSO.FolderExists(strShare) = True) Then
        On Error Resume Next
       if not objFSO.FileExists(strShare & "\" & strLogFile) Then
          Set objLogFile = objFSO.CreateTextFile(strShare & "\" & strLogFile , True)
           If (Err.Number = 0) Then
               ' Make three attempts to write to log file.
               intCount = 1
               blnLog = False
               Do Until intCount = 3
                   objLogFile.WriteLine "Logon ; "  & Now & " ; " _
                       & strComputerName & " ; " & strUserName & " " & strIP
                   If (Err.Number = 0) Then
                       intCount = 3
                       blnLog = True
                   Else
                       Err.Clear
                       intCount = intCount + 1
                       If (Wscript.Version > 5) Then
                           Wscript.Sleep 200
                       End If
                   End If
               Loop
               On Error GoTo 0
               If (blnLog = False) Then
                   strTitle = "Logon Error"
                   strText = "Log cannot be written."
                   strText = strText & vbCrlf _
                       & "Another process may have log file open."
                   intConstants = vbOKOnly + vbExclamation
                   intAns = objShell.Popup(strText, intTimeout, strTitle, _
                       intConstants)
               End If
               objLogFile.Close
           Else
               On Error GoTo 0
               strTitle = "Logon Error"
               strText = "Log cannot be written."
               strText = strText & vbCrLf & "User may not have permissions,"
               strText = strText & vbCrLf & "or log folder may not be shared."
               intConstants = vbOKOnly + vbExclamation
               intAns = objShell.Popup(strText, intTimeout, strTitle, intConstants)
           End If
           Set objLogFile = Nothing
       End if
    End If

    Set objFSO = Nothing
    Set objNetwork = Nothing
    Set objShell = Nothing

    Wscript.Quit

    Function GetIPAddresses()
    Dim Loc,WbemServices,Adapters,Adapter
    Set loc = CreateObject( "WbemScripting.SWbemLocator" )
    Set WbemServices = loc.ConnectServer( ,"root\cimv2" )
    Set Adapters=WbemServices.ExecQuery( "Select * FROM" & _
    " Win32_NetworkAdapterConfiguration" )
    For Each Adapter in Adapters
       If NOT IsNull( Adapter.IPAddress) Then
         if  Left(Adapter.IPAddress(0),1) > 0 Then
            strIP = Adapter.IPAddress(0)
         End if
       
       End If
    Next
    GetIPAddresses = strIP
    End Function

    quarta-feira, 1 de julho de 2009 21:42

Respostas

  • Olá,

    Você tem duas opções: ou coloca no arquivo de log a maquina e o usuário Ex.: maquinaA-usuarioB, ou deixa o log acumulando os valores...

    Para colocar no log maquinaA-usuarioB.lob é só alterar a linha abaixo:

    strLogFile = objNetWork.ComputerName & "-" & objNetWork.Username & ".txt"

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Marcelo TI sexta-feira, 3 de julho de 2009 20:20
    sexta-feira, 3 de julho de 2009 12:26

Todas as Respostas

  • Alguma luz para solucionar a questão ????
    quinta-feira, 2 de julho de 2009 02:13
  • Olá,

    Marcelo,

    Dá uma olhada no script abaixo, veja se é isso que você precisa:

    Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns
    Dim intConstants, intTimeout, strTitle, intCount, blnLog
    Dim strUserName, strComputerName, strIP, strShare, strLogFile

    strShare = "C:\"

    intTimeout = 20

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objNetwork = CreateObject("Wscript.Network")
    Set objShell = CreateObject("Wscript.Shell")

    strUserName = objNetwork.Username
    strLogFile = objNetWork.Username & ".txt"
    strComputerName = objNetwork.ComputerName
    strIP =  GetIPAddresses 'Join(GetIPAddresses())

    If (objFSO.FolderExists(strShare) = True) Then
        On Error Resume Next
       if not objFSO.FileExists(strShare & "\" & strLogFile) Then
          Set objLogFile = objFSO.CreateTextFile(strShare & "\" & strLogFile , True)
           If (Err.Number = 0) Then
               ' Make three attempts to write to log file.
               intCount = 1
               blnLog = False
               Do Until intCount = 3
                   objLogFile.WriteLine "Logon ; "  & Now & " ; " _
                       & strComputerName & " ; " & strUserName & " " & strIP
                   If (Err.Number = 0) Then
                       intCount = 3
                       blnLog = True
                   Else
                       Err.Clear
                       intCount = intCount + 1
                       If (Wscript.Version > 5) Then
                           Wscript.Sleep 200
                       End If
                   End If
               Loop
               On Error GoTo 0
               If (blnLog = False) Then
                   strTitle = "Logon Error"
                   strText = "Log cannot be written."
                   strText = strText & vbCrlf _
                       & "Another process may have log file open."
                   intConstants = vbOKOnly + vbExclamation
                   intAns = objShell.Popup(strText, intTimeout, strTitle, _
                       intConstants)
               End If
               objLogFile.Close
           Else
               On Error GoTo 0
               strTitle = "Logon Error"
               strText = "Log cannot be written."
               strText = strText & vbCrLf & "User may not have permissions,"
               strText = strText & vbCrLf & "or log folder may not be shared."
               intConstants = vbOKOnly + vbExclamation
               intAns = objShell.Popup(strText, intTimeout, strTitle, intConstants)
           End If
           Set objLogFile = Nothing
       End if
    End If

    Set objFSO = Nothing
    Set objNetwork = Nothing
    Set objShell = Nothing

    Wscript.Quit

    Function GetIPAddresses()
    Dim Loc,WbemServices,Adapters,Adapter
    Set loc = CreateObject( "WbemScripting.SWbemLocator" )
    Set WbemServices = loc.ConnectServer( ,"root\cimv2" )
    Set Adapters=WbemServices.ExecQuery( "Select * FROM" & _
    " Win32_NetworkAdapterConfiguration" )
    For Each Adapter in Adapters
       If NOT IsNull( Adapter.IPAddress) Then
         if  Left(Adapter.IPAddress(0),1) > 0 Then
            strIP = Adapter.IPAddress(0)
         End if
      
       End If
    Next
    GetIPAddresses = strIP
    End Function


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quinta-feira, 2 de julho de 2009 16:30
  • show mais uma vez, esse quebrou de primeira, agora se eu tiver mais que 1 usuario na estaçao ele ira rodar para cada usuario, e nao ira rodar novamente quando o usuario realizar um novo logon na mesma maquina..

    agora respondendo a vc me deu uma outra questão, se o usuario que compartilha a maquina x com mais dois usuarios bele resolveu o meu problema porem se esse mesmo usuario usar tb uma maquina y nao ira rodar novamente não é... tem como fazer um relacionamento na funçao de referencia do log do tipo usuario A maquina A log criado, nao recrio log, mais usuario A maquina B crio o log e gero uma nova referencia para nao rodar novamente nessa situaçao.

    Abraço Jesiel.
    quinta-feira, 2 de julho de 2009 21:22
  • Olá,

    Você tem duas opções: ou coloca no arquivo de log a maquina e o usuário Ex.: maquinaA-usuarioB, ou deixa o log acumulando os valores...

    Para colocar no log maquinaA-usuarioB.lob é só alterar a linha abaixo:

    strLogFile = objNetWork.ComputerName & "-" & objNetWork.Username & ".txt"

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Marcado como Resposta Marcelo TI sexta-feira, 3 de julho de 2009 20:20
    sexta-feira, 3 de julho de 2009 12:26
  • Boa tarde Jesiel

    Otimo cara assim é melhor vou pelo maquinaA-usuarioB valeu cara obrigado mais uma vez.
    sexta-feira, 3 de julho de 2009 20:19