none
Script não funciona de jeito nenhum ! RRS feed

  • Pergunta

  • Olá pessoal !!!!
    to com um grave problema , fiz um scipt para gerar um logo para os meus documentos .... mas para minha supresa ele so da erro e não funciona de jeito nenhum !!!! ja re-escrevi ele umas 3 vezes e nada funciona .. cada hora o erro é dado em uma linha diferente ! não sei mais oque fazer ......
    Vou explicar como funciona ...
    Tem uma GPO que roda o script durante o logon .... esse script verifica se o caminho dos meus documentos foi alterado, caso ja tenha sido alterado, ele grava uma entrada em um arquivo texto chamado LogOk.txt , caso não tenha sido alterado, grava uma entrada no logo LogErro.txt....

    segue abaixo o script:

    DIM fso, txtfile , strMyDocumentsGPO, strLogErro, strLogOk, strUserName
    Const ForReading = 1, ForWriting = 2, ForAppending = 8

    'Coleta de dados do usuario e computador
    Set objNetwork = WScript.CreateObject("Wscript.Network")
     strUserName   = objNetwork.UserName
     strComputerName  = objNetwork.ComputerName
     strDomainName  = objNetwork.UserDomain
     
     'procura por utilização de drives de rede e caminhos de rede
     Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")
     Set strDrives = objWMIService.ExecQuery ("Select * From Win32_LogicalDisk Where DriveType = 4")
     
     'verifica se esta mapeado o caminho ou a Letra e remove
     For Each objDrive in strDrives
      Select case objDrive.DeviceID
      case "L:"
      objNetwork.RemoveNetworkDrive "L:"
         End Select
      select case objDrive.ProviderName
      case "\\srvfiles01\LogMyDocuments"
      objNetwork.RemoveNetworkDrive "\\srvfiles01\LogMyDocuments"
      case "\\srvfiles01.corp.local\LogMyDocuments"
      objNetwork.RemoveNetworkDrive "\\srvfiles01.corp.local\LogMyDocuments"
      End Select
     Next
     
     'mepea o L: aonde fica o log
     objNetwork.MapNetworkDrive "L:", "\\srvfiles01\LogMyDocuments"
     
     'valores doe comparação e localização de logs
     Set objShell = WScript.CreateObject("Wscript.Shell")
     'Configuração do Script
      strMyDocumentsDefault = objShell.SpecialFolders("MyDocuments")
      strMyDocumentsGPO    = "\\srvfiles01\home\"&strUserName&"\documentos"
      strLogErro     = "L:\LogErro.txt"
      strLogOk     = "L:\LogOk.txt"

     'Criando Conteudo do log erro.
      strConteudoErro =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: Erro!!!! Pasta Meus Documentos não foi alterado!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf

     'Criando Conteudo do log erro.
      strConteudoOK =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: OK!!!! Pasta Meus Documentos esta alterada!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf
              
     Set fso = CreateObject("Scripting.FileSystemObject")
     'verifica e salva o log conforme a necessidade
     if strMyDocumentsGPO <> strMyDocumentsDefault then
      if fso.FileExists(strLogErro) then
       Set fso2 = fso.GetFile(strLogErro)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoErro
        txtfile.Close
      else
       Set txtfile = fso.CreateTextFile(strLogErro, True)
        txtfile.WriteLine (strConteudoErro)
           txtfile.Close
      end if
     objNetwork.RemoveNetworkDrive "L:"
     else
      if fso.FileExists(strLogOk) then
       Set fso2 = fso.GetFile(strLogOk)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoOK
        txtfile.Close
        
      else
       Set txtfile = fso.CreateTextFile(strLogOk, True)
        txtfile.WriteLine (strConteudoOK)
        txtfile.Close
      end if
     End IF
     'Remove o L:
     objNetwork.RemoveNetworkDrive "L:"


    Bernardo C. Srur
    segunda-feira, 24 de agosto de 2009 11:30

Respostas

  • Olá,

    Eu vi que tinha duas vezes para desconectar (uma dentro do IF e outra fora).


    Segue o script final:

    DIM fso, txtfile , strMyDocumentsGPO, strLogErro, strLogOk, strUserName
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    'Coleta de dados do usuario e computador
    Set objNetwork = WScript.CreateObject("Wscript.Network")
    Set oDrives = objNetwork.EnumNetworkDrives
    strUserName   = objNetwork.UserName
    strComputerName  = objNetwork.ComputerName
    strDomainName  = objNetwork.UserDomain
     
     'procura por utilização de drives de rede e caminhos de rede
     Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")

     
     DriveMapper("L:")
     
     'mepea o L: aonde fica o log
     objNetwork.MapNetworkDrive "L:", "\\srvlinux\publico"
     
     'valores doe comparação e localização de logs
     Set objShell = WScript.CreateObject("Wscript.Shell")
     'Configuração do Script
      strMyDocumentsDefault = objShell.SpecialFolders("MyDocuments")
      strMyDocumentsGPO    = "\\srvfiles01\home\"&strUserName&"\documentos"
      strLogErro     = "L:\LogErro.txt"
      strLogOk     = "L:\LogOk.txt"

     'Criando Conteudo do log erro.
      strConteudoErro =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: Erro!!!! Pasta Meus Documentos não foi alterado!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf

     'Criando Conteudo do log erro.
      strConteudoOK =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: OK!!!! Pasta Meus Documentos esta alterada!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf
            
     Set fso = CreateObject("Scripting.FileSystemObject")
     'verifica e salva o log conforme a necessidade]
    wscript.echo strMyDocumentsGPO
    wscript.echo strMyDocumentsDefault
     if strMyDocumentsGPO <> strMyDocumentsDefault then
      if fso.FileExists(strLogErro) then
       Set fso2 = fso.GetFile(strLogErro)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoErro
        txtfile.Close
      else
       Set txtfile = fso.CreateTextFile(strLogErro, True)
        txtfile.WriteLine (strConteudoErro)
           txtfile.Close
      end if
     else
      if fso.FileExists(strLogOk) then
       Set fso2 = fso.GetFile(strLogOk)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoOK
        txtfile.Close
      
      else
       Set txtfile = fso.CreateTextFile(strLogOk, True)
        txtfile.WriteLine (strConteudoOK)
        txtfile.Close
      end if
     End IF
     'Remove o L:
     
    DriveMapper("L:")

    '==============================================================================

    Sub DriveMapper(Drive)
    For i = 0 to oDrives.Count -1 Step 2
       if LCase(Drive) = LCase(oDrives.Item(i)) then
          objNetwork.RemoveNetworkDrive Drive, true, true
       End if
    Next

    End sub

    '===============================================================================



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Bernardo C. Srur segunda-feira, 24 de agosto de 2009 13:26
    segunda-feira, 24 de agosto de 2009 13:06

Todas as Respostas

  • Olá,

    Talvez pode estar gerando o erro nos mapeamentos.

    Fiz uma alteração, verifique se vai funcionar:


    DIM fso, txtfile , strMyDocumentsGPO, strLogErro, strLogOk, strUserName
    Const ForReading = 1, ForWriting = 2, ForAppending = 8

    'Coleta de dados do usuario e computador
    Set objNetwork = WScript.CreateObject("Wscript.Network")
    Set oDrives = objNetwork.EnumNetworkDrives
    strUserName   = objNetwork.UserName
    strComputerName  = objNetwork.ComputerName
    strDomainName  = objNetwork.UserDomain
     
     'procura por utilização de drives de rede e caminhos de rede
     Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")

     
     DriveMapper("L:")
     
     'mepea o L: aonde fica o log
     objNetwork.MapNetworkDrive "L:", "\\srvfiles01\LogMyDocuments"
     
     'valores doe comparação e localização de logs
     Set objShell = WScript.CreateObject("Wscript.Shell")
     'Configuração do Script
      strMyDocumentsDefault = objShell.SpecialFolders("MyDocuments")
      strMyDocumentsGPO    = "\\srvfiles01\home\"&strUserName&"\documentos"
      strLogErro     = "L:\LogErro.txt"
      strLogOk     = "L:\LogOk.txt"

     'Criando Conteudo do log erro.
      strConteudoErro =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: Erro!!!! Pasta Meus Documentos não foi alterado!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf

     'Criando Conteudo do log erro.
      strConteudoOK =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: OK!!!! Pasta Meus Documentos esta alterada!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf
             
     Set fso = CreateObject("Scripting.FileSystemObject")
     'verifica e salva o log conforme a necessidade]
     if strMyDocumentsGPO <> strMyDocumentsDefault then
      if fso.FileExists(strLogErro) then
       Set fso2 = fso.GetFile(strLogErro)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoErro
        txtfile.Close
      else
       Set txtfile = fso.CreateTextFile(strLogErro, True)
        txtfile.WriteLine (strConteudoErro)
           txtfile.Close
      end if
     objNetwork.RemoveNetworkDrive "L:"
     else
      if fso.FileExists(strLogOk) then
       Set fso2 = fso.GetFile(strLogOk)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoOK
        txtfile.Close
       
      else
       Set txtfile = fso.CreateTextFile(strLogOk, True)
        txtfile.WriteLine (strConteudoOK)
        txtfile.Close
      end if
     End IF
     'Remove o L:
     
    DriveMapper("L:")

    '==============================================================================

    Sub DriveMapper(Drive)
    For i = 0 to oDrives.Count -1 Step 2
       if LCase(Drive) = LCase(oDrives.Item(i)) then
          WshNetwork.RemoveNetworkDrive Drive, true, true
       End if
    Next

    End sub

    '===============================================================================


    Se gerar algum erro, coloque aqui o erro que gerou.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    segunda-feira, 24 de agosto de 2009 11:47
  • Blz vou tentar, mas antes da alteração ele estava dando erro na linha que abre o arquivo TXT e adicionava o valor bom nessa comecei a mapear e no fim do script ele removia o mapeamento ... nisso começou a dar erro na linha que mapeava informando que ja estava em uso (mesmo não estando) logo depois mandei remover o mapeamento e o caminho ai começou a dar erro no case ... ja não tava entendo mais nada !rsrsrsrsrr vou tentar aqui e te retorno obrigado !
    Bernardo C. Srur
    segunda-feira, 24 de agosto de 2009 11:56
  • Fiz uma pequena alteração no pq ele o bjeto necessitava do Wshnetwork...
    estava:
           WshNetwork.RemoveNetworkDrive Drive, true, true
    mudei:
         objNetwork.RemoveNetworkDrive Drive, true, true

    depois da mudança começou a dar o seguinte erro:
    Linha 17 : o nome dispositivo ja esta em uso...
    Linha 17 : objNetwork.MapNetworkDrive "L:", "\\srvfiles01\LogMyDocuments"

    fui la no meu computador e reparei que o drive L: esta mapeado porém não fui eu quem mapeou....

    e agora ? rs
    aonde vc acha que possa estar acontecendo o problema ?


    Bernardo C. Srur
    segunda-feira, 24 de agosto de 2009 12:17
  • Olá,

    Coloca no inicio do script:

    on error resume next

    E verifique se está executando normalmente.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    segunda-feira, 24 de agosto de 2009 12:31
  • Opa ! agora foi so que ele não esta removendo o mapeamento L: ....
    me explica aonde estava o erro e porque estava acontecendo ?

    Bernardo C. Srur
    segunda-feira, 24 de agosto de 2009 12:41
  • Olá,

    Eu vi que tinha duas vezes para desconectar (uma dentro do IF e outra fora).


    Segue o script final:

    DIM fso, txtfile , strMyDocumentsGPO, strLogErro, strLogOk, strUserName
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    'Coleta de dados do usuario e computador
    Set objNetwork = WScript.CreateObject("Wscript.Network")
    Set oDrives = objNetwork.EnumNetworkDrives
    strUserName   = objNetwork.UserName
    strComputerName  = objNetwork.ComputerName
    strDomainName  = objNetwork.UserDomain
     
     'procura por utilização de drives de rede e caminhos de rede
     Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")

     
     DriveMapper("L:")
     
     'mepea o L: aonde fica o log
     objNetwork.MapNetworkDrive "L:", "\\srvlinux\publico"
     
     'valores doe comparação e localização de logs
     Set objShell = WScript.CreateObject("Wscript.Shell")
     'Configuração do Script
      strMyDocumentsDefault = objShell.SpecialFolders("MyDocuments")
      strMyDocumentsGPO    = "\\srvfiles01\home\"&strUserName&"\documentos"
      strLogErro     = "L:\LogErro.txt"
      strLogOk     = "L:\LogOk.txt"

     'Criando Conteudo do log erro.
      strConteudoErro =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: Erro!!!! Pasta Meus Documentos não foi alterado!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf

     'Criando Conteudo do log erro.
      strConteudoOK =  "Usuario: " & strUserName & vbCrLf _
          & "Computador: "& strComputerName & vbCrLf _
          & "Dominio: " & strDomainName & vbCrLf _
          & vbCrLf _
          & "Data: " & Date & vbCrLf _
          & "Hora: " & Time & vbCrLf _
          & "Ação: OK!!!! Pasta Meus Documentos esta alterada!" _
          & vbCrLf _
          & "-----------------------------------------------------------------" _
          & vbCrLf _
          & vbCrLf
            
     Set fso = CreateObject("Scripting.FileSystemObject")
     'verifica e salva o log conforme a necessidade]
    wscript.echo strMyDocumentsGPO
    wscript.echo strMyDocumentsDefault
     if strMyDocumentsGPO <> strMyDocumentsDefault then
      if fso.FileExists(strLogErro) then
       Set fso2 = fso.GetFile(strLogErro)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoErro
        txtfile.Close
      else
       Set txtfile = fso.CreateTextFile(strLogErro, True)
        txtfile.WriteLine (strConteudoErro)
           txtfile.Close
      end if
     else
      if fso.FileExists(strLogOk) then
       Set fso2 = fso.GetFile(strLogOk)
        Set txtfile = fso2.OpenAsTextStream(ForAppending,-2)
        txtfile.Write strConteudoOK
        txtfile.Close
      
      else
       Set txtfile = fso.CreateTextFile(strLogOk, True)
        txtfile.WriteLine (strConteudoOK)
        txtfile.Close
      end if
     End IF
     'Remove o L:
     
    DriveMapper("L:")

    '==============================================================================

    Sub DriveMapper(Drive)
    For i = 0 to oDrives.Count -1 Step 2
       if LCase(Drive) = LCase(oDrives.Item(i)) then
          objNetwork.RemoveNetworkDrive Drive, true, true
       End if
    Next

    End sub

    '===============================================================================



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Bernardo C. Srur segunda-feira, 24 de agosto de 2009 13:26
    segunda-feira, 24 de agosto de 2009 13:06
  • Agora Funcionou perfeito !!!!! vc pode me explicar oq estava contecendo ?
    pois fiquei perdido agora ....
    Bernardo C. Srur
    segunda-feira, 24 de agosto de 2009 13:25
  • Olá,

    Então... ele tava desconectando no começo e mapeando... depois ele fazia 2 desconexões.

    Só alterei para que ele conectar uma vez e desconectar no final...

    Bacana que resolveu!!! Se precisar estamos aí!!!


    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    segunda-feira, 24 de agosto de 2009 13:36