none
copia de arquivos RRS feed

  • Pergunta

  •  

    pessoal,

     

    estou com o seguinte problema.

     

    tenho em um servidor aki na empresa em uma unidade uma pasta chamada usuarios que onde fica a pasta pessoal de todos os meu usuarios da rede.

     

    temos um sistema que precisa de alguns arquivos e este arquivos jogamos na pasta pessoal do usuario pois cada usuarios deve ter as suas tabelas dentro do sistema do siscomex.

     

    então preciso de vez enquando fazer a atualização deste arquivos que são iguais para todos os usuarios.

     

    pergunta?

     

    preciso de um script que faz a seguinte operação.

     

    copia da pasta \\srv00\siscoprd todos os arquivos nela contidos para a pasta \\srv01\usuarios\%username%\siscoprd.

     

    tentei com o script do marco antonio mas não funcionou.

     

    fico no aguardo

    quinta-feira, 17 de abril de 2008 19:23

Respostas

  • Anderson, tenta assim então:

     

    Dim usuarios()
    i = 0


    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT Name FROM 'LDAP://dc=seudominio,dc=com, dc=br' WHERE objectCategory='user'" 
    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF

        Redim Preserve usuarios(i)
        usuarios(i) =  objRecordSet.Fields("sAMAccountName").Value

        i = i +1
        objRecordSet.MoveNext
    Loop

    Set shell = createobject("wscript.shell")

    set FSO = createobject("scripting.filesystemobject")

    for j = 0 to i-1

      if FSO.folderexists("\\srv01\usuarios\" & usuarios(j) & "\siscoprd") then

        shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\" & usuarios(j) & "\siscoprd")  /s /e /y"

      end if

    next

     

    segunda-feira, 28 de abril de 2008 16:53

Todas as Respostas

  • silvanderson você pode usar o comando xcopy dentro de um script segue ele Wink:

     

    set shell = createobject("wscript.shell")

    shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\%username%\siscoprd /s /e /y"

    quinta-feira, 17 de abril de 2008 20:22
  • Silvanderson segue o script em VBS.

     

    Code Snippet

    Const OverwriteExisting = TRUE
    Set wshNetwork = WScript.CreateObject( "WScript.Network")
    UserName = WSHNetwork.UserName

     

    Origem = "\\srv00\siscoprd"

    Destino = "\\srv01\usuarios\" & UserName & "\siscoprd\"

     

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.CopyFile Origem , Destino , OverwriteExisting

     

     

     

    quinta-feira, 17 de abril de 2008 20:56
  • valeu laerte o pots resolveu meu problema

    sexta-feira, 18 de abril de 2008 13:27
  • Laerte mais uma duvida dento da psta usuarios tenho todas as pasta dos usuarios cada uma nomeada com o user name do ussuario.

     

    Pergunta teria como neste script que vc me passou ele ir alterando os nomes das pasta.

     

    ex

     

    shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\anderson\siscoprd /s /e /y"

    shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\carlos\siscoprd /s /e /y"

     

    e assim por diante para que eu possa rodar o script somente quando houver uma atualização de fato.

     

    aguardo retorno

     

    Anderson Silva

    sexta-feira, 18 de abril de 2008 14:39
  • Anderson segue script, testa ae e me fala e se caso resolver não esqueça de marcar como resposta Wink

    Dim usuarios()
    i = 0


    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT Name FROM 'LDAP://dc=seudominio,dc=com, dc=br' WHERE objectCategory='user'" 
    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF

        Redim Preserve usuarios(i)
        usuarios(i) =  objRecordSet.Fields("Name").Value

        i = i +1
        objRecordSet.MoveNext
    Loop

    Set shell = createobject("wscript.shell")

    set FSO = createobject("scripting.filesystemobject")

    for j = 0 at i-1

      if FSO.folderexists("\\srv01\usuarios\" & usuarios(j) & "\siscoprd") then

        shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\" & usuarios(j) & "\siscoprd")  /s /e /y"

      end if

    next

    sexta-feira, 18 de abril de 2008 21:38
  • ola laerte, a instrucao que voce passou nao funcionou.

    Apresentou o seguinte erro na linha 20.

     

    BOF ou EOF sao verdadeiros, ou o registro atual foi excluido. a operacao solicita pelo aplicativo requer um registro atual

    Codigo: 800A0BCD

    Origem: ADODB.Recordset

    quarta-feira, 23 de abril de 2008 13:54
  • silvanderson, testei o script aqui e funcionou belezinha, sem nenhum erro, como que você colocou a sua string LDAP?

     

    outra coisa, modifica a linha do for para for j=0 to i -1 ok?

    quarta-feira, 23 de abril de 2008 17:20
  •  

    Dim usuarios()
    i = 0


    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT Name FROM 'LDAP://dc=Fiorde' WHERE objectCategory='Terminal'" 
    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF

        Redim Preserve usuarios(i)
        usuarios(i) =  objRecordSet.Fields("Name").Value

        i = i +1
        objRecordSet.MoveNext
    Loop


    Set shell = createobject("wscript.shell")

    set FSO = createobject("scripting.filesystemobject")

    for j=0 to i-1
      if FSO.folderexists("\\FRD-spo01\d$\teste\"&usuarios(j)&"\siscoprd") then
        shell.run "xcopy \\FRD-spo01\d$]copias \\FRD-spo01\d$\teste\"&usuarios(j)&"\Siscoprd)  /s /e /y"
      end if
    next

    este é o meu script agora me parece que ele nao esta encontrando a tabela "terminal" pois acredito que se por conta dela estar dentro de outra unidade organizacional chamada "OU - User", mas tambem testei com esta ou e tambem nao funcionou .

     

    Da um erro de tabela inexistente.

    quarta-feira, 23 de abril de 2008 18:29
  • silvanderson, seu script está errado, coloque desse jeito e altere somente o que está em negrito, pois esse script faz o seguinte ele pega todos os usuários do seu AD e verifica se existe uma pasta para ele, se existir ele executa a copia Wink

    Dim usuarios()
    i = 0


    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT Name FROM 'LDAP://dc=seudominio,dc=com, dc=br' WHERE objectCategory='user'" 
    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF

        Redim Preserve usuarios(i)
        usuarios(i) =  objRecordSet.Fields("Name").Value

        i = i +1
        objRecordSet.MoveNext
    Loop

    Set shell = createobject("wscript.shell")

    set FSO = createobject("scripting.filesystemobject")

    for j = 0 to i-1

      if FSO.folderexists("\\srv01\usuarios\" & usuarios(j) & "\siscoprd") then

        shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\" & usuarios(j) & "\siscoprd")  /s /e /y"

      end if

    next

     

    PS: edição do dominio, se o seu dominio for, teste.com.br você vai ter que alterar, o que está em negrito para dc=teste, dc=com, dc=br ok? Wink

    quarta-feira, 23 de abril de 2008 21:05
  • Laerte,

     

    fiz a alteração e não deu mais erro, mas tambem nao fez o que deveria fazer que é a copia do arquivos. entrei nas pastas dos usuarios e todos tem a pasta siscoprd.

     

    teria como checar o que eles esta trazendo nas variaveis?

     

    Anderson Silva

    quinta-feira, 24 de abril de 2008 12:03
  • Laerte tudo?

    olha tente usar esse script com o comando cscript no prompt da seguinte forma: copiei seu script para o notepad personalizando para meu domínio e salvei como copia.vbs. quando executo no prompt "cscript copia.vbs" aparece o seguinte erro: VBScript compilation erro: Expected ' TO'.

     

    Você poderia me ajudar a resolver esse problema?

     

    Obrigado

     

    Rodrigo

    sexta-feira, 25 de abril de 2008 16:57
  •  

    quis dizer acima "LAERTE, TUDO BEM?"
    sexta-feira, 25 de abril de 2008 17:03
  • son rode o script dessa forma aqui e veja se os nomes que aparecerão serão os mesmos que estão nas pastas se não for me avise ou então coloque aqui um atributo que seja igual ao nome da pasta na parte do usuario e no AD EX: a pasta é \\srv01\usuarios\Carlos\siscoprd onde Carlos equivale ao atributo no AD Wink

    Dim usuarios()
    i = 0


    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT Name FROM 'LDAP://dc=seudominio,dc=com, dc=br' WHERE objectCategory='user'" 
    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF

        Redim Preserve usuarios(i)
        usuarios(i) =  objRecordSet.Fields("Name").Value

        i = i +1
        objRecordSet.MoveNext
    Loop

    Set shell = createobject("wscript.shell")

    set FSO = createobject("scripting.filesystemobject")

    for j = 0 to i-1

    '  if FSO.folderexists("\\srv01\usuarios\" & usuarios(j) & "\siscoprd") then

    '    shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\" & usuarios(j) & "\siscoprd")  /s /e /y"

    '  end if

    wscript.echo usuarios(j)

    next

     

    Ricardo, editei o script pode copiar que esse erro do to já está concertado Wink

     

    ps: desculpem a demora para responder, semana de trabalho corrida, não tive tempo de vir no fórum

    domingo, 27 de abril de 2008 00:27
  • Bom dia Laerte,

     

    Realmente o script funciona, mas pelo que eu percebi ele esta pegando o nome de exibição e não o login. ex: o meu login é anderson.silva e ele esta trazendo Anderson Silva. Teria que buscar o Nome de login e não o de exibição.

     

    Sem mais e Aguardo retorno.

    segunda-feira, 28 de abril de 2008 12:20
  • Anderson, tenta assim então:

     

    Dim usuarios()
    i = 0


    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT Name FROM 'LDAP://dc=seudominio,dc=com, dc=br' WHERE objectCategory='user'" 
    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF

        Redim Preserve usuarios(i)
        usuarios(i) =  objRecordSet.Fields("sAMAccountName").Value

        i = i +1
        objRecordSet.MoveNext
    Loop

    Set shell = createobject("wscript.shell")

    set FSO = createobject("scripting.filesystemobject")

    for j = 0 to i-1

      if FSO.folderexists("\\srv01\usuarios\" & usuarios(j) & "\siscoprd") then

        shell.run "xcopy \\srv00\siscoprd \\srv01\usuarios\" & usuarios(j) & "\siscoprd")  /s /e /y"

      end if

    next

     

    segunda-feira, 28 de abril de 2008 16:53
  • Laerte,

     

    Deu o seguinte erro na linha 24 que coresponde a "  usuarios(i) =  objRecordSet.Fields("sAMAccountname").Value"

     

    erro: o item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado.

    codigo: 800A0CC1

    Origem: ADODB.Recordset

     

     

    Aguardo retono

    segunda-feira, 28 de abril de 2008 17:17
  • Laerte ja acertei o erro era o select que estava trazendo o name e nao o samaccountname alterei e funcionou belezinha.

     

    agora no mesmo arquivo script vou precisar por um if para compiar um unico arquivo de uma pasta com varias pasta dentro e outros arquivos.

     

    coloquei da segunte foma, mas ele copia o arquivo que eu quer e mais uma pasta sem nada dentro.

     

     

    if FSO.folderexists("\\ci04\d\teste\"&usuarios(j)&"\siscoprd") then
     shell.run "xcopy \\ci04\d\siscoprd \\ci04\d\teste\"&usuarios(j)&"\siscoprd /s /e /y"

      end if

    if FSO.folderexists("\\ci04\d\teste\"&usuarios(j)&"\windows") then
     shell.run "xcopy \\ci04\d\windows\serpro.ini \\ci04\d\teste\"&usuarios(j)&"\windows /s /e /y"

      end if

     

    ele funcionou mas copia uma pasta que eu não preciso so quero o .ini.

     

     

    Sem mais Anderson

    segunda-feira, 28 de abril de 2008 19:31
  • coloca desse jeito aqui Wink:

     

    if FSO.folderexists("\\ci04\d\teste\"&usuarios(j)&"\windows") then
     shell.run "xcopy \\ci04\d\windows\serpro.ini \\ci04\d\teste\"&usuarios(j)&"\windows /y"

      end if

    segunda-feira, 28 de abril de 2008 21:10