none
Script para mover pastas e arquivos - windows server 2008 RRS feed

  • Pergunta

  • Gostaria de saber como faço para criar um script que faça uma leitura no nome das pastas destro do meu servidor de arquivos e partindo de uma lista pre-definida, as pastas e arquivos que não estiverem nessa lista deverão ser movidas para uma pasta determinada substituindo alguma pasta com mesmo nome.. Ex... tenho no ServFiles as seguintes pastas: ADM, FIN, CONT, PUB onde PUB é a pasta publica. Existem uns usuários na rede com permissões privilegiadas que estão criando pastas no diretório raiz junto com ADM, FIN, etc... Quero fazer um script que faça a leitura da pasta raiz e qualquer arquivo ou pasta que não seja ADM, FIN, CONT, PUB, sejam movidos para dentro da pasta PUB e substituam qualquer arquivo com mesmo nome que ja exista na pasta PUB... Alguem sabe como faço isso?
    segunda-feira, 30 de março de 2015 18:54

Respostas

  • Manassés,

    Leia todos os diretórios da raiz (não use o -recurse), compare com os nomes de um array (que é criado a partir de um arquivo texto) e apague os que não estiverem no array.

    $Pasta_Raiz = "C:\teste"
    $Arquivo_Permitidos = "C:\teste\teste.txt"
    
    $array_permitido = Get-Content $Arquivo_Permitidos
    
    foreach( $Pasta in (Dir -Path $Pasta_Raiz -Directory) ){
    
        if (-not ($array_permitido -contains $Pasta.Name) ){
            #Se não está no array então apaga
            Remove-Item $Pasta.FullName
               
        }
    
    
    }

    Já fui administrador de File server, o melhor era tirar a permissão de criar pastas e arquivos na raiz.

    Ref.:

    What Is (and What Isn’t) in Our Array?

    https://technet.microsoft.com/en-us/library/ee692798.aspx#feedback


    Fábio de Paula Junior


    segunda-feira, 6 de abril de 2015 21:07
    Moderador

Todas as Respostas

  • Manassés,

    Leia todos os diretórios da raiz (não use o -recurse), compare com os nomes de um array (que é criado a partir de um arquivo texto) e apague os que não estiverem no array.

    $Pasta_Raiz = "C:\teste"
    $Arquivo_Permitidos = "C:\teste\teste.txt"
    
    $array_permitido = Get-Content $Arquivo_Permitidos
    
    foreach( $Pasta in (Dir -Path $Pasta_Raiz -Directory) ){
    
        if (-not ($array_permitido -contains $Pasta.Name) ){
            #Se não está no array então apaga
            Remove-Item $Pasta.FullName
               
        }
    
    
    }

    Já fui administrador de File server, o melhor era tirar a permissão de criar pastas e arquivos na raiz.

    Ref.:

    What Is (and What Isn’t) in Our Array?

    https://technet.microsoft.com/en-us/library/ee692798.aspx#feedback


    Fábio de Paula Junior


    segunda-feira, 6 de abril de 2015 21:07
    Moderador
  • Caro Fabio, salvei o script como .BAT e não funcionou, segue abaixo as modificações:

               

    $Pasta_Raiz = "C:\PASTA"
    $Arquivo_Permitidos = "C:\PASTA\arquivos.txt"


    $array_permitido = Get-Content $Arquivo_Permitidos

    foreach( $Pasta in (Dir -Path $Pasta_Raiz -Directory) ){

        if (-not ($array_permitido -contains $Pasta.Name) ){
            #Se não está no array então apaga
            Remove-Item $Pasta.FullName

        }

    }
    PAUSE

    Eu preciso que o script mova os arquivos e pastas pra outro local e não exclua de primeira

    conteudo de arquivos.txt segue abaixo:

    C:\PASTA\teste.bat
    C:\PASTA\PASTA1
    C:\PASTA\PASTA2
    C:\PASTA\PASTA3

    tentei executar como ADM local tambem mas mesmo assim não aconteceu nada...

    quinta-feira, 16 de abril de 2015 15:08
  • Só uma OBS... eu coloquei os arquivos no txt sem C:\PASTA\ e tambem não funcionou.
    quinta-feira, 16 de abril de 2015 15:14
  • O script é powershell (.ps1).

    Fábio de Paula Junior

    quinta-feira, 16 de abril de 2015 15:14
    Moderador
  • Blz, deu certinho... só queria mover os arquivos tb... mover eles pra uma pasta chamada PUBLICA... o script atual esta apenas deletando as pastas e deixando os arquivos.. tem como fazer dessa forma? mover arquivos e pastas pra dentro da publico que esta no mesmo diretorio???

    quinta-feira, 16 de abril de 2015 17:51
  • Outra coisa... ele esta me pedindo pra clicar ok ao final do processo, tem como automatizar isso? quero agendar uma tarefa pra executar esse script pelo menos uma vez por semana...
    quinta-feira, 16 de abril de 2015 17:54
  • O Robocop também é uma boa opção para este seu caso.

    Wellington Agápto - MVP 
    Microsoft Certified Systems Engineer | Cloud Architect and Team Leader
    ITIL, CCNA, MCP, MTA, MCITP, MCTS, MCSA, MCSA Office 365, MCSE Communication | Messaging
    Visite: Office365News | 
    WellingtonAgapto.org

    quinta-feira, 16 de abril de 2015 19:10
  • Consegui resolver o problema... Segue abaixo o script:

    $Pasta_Raiz = "C:\PASTA"
    $Arquivo_Permitidos = "C:\PASTA\arquivos.txt"
    $Pasta_Pub = "C:\PASTA\PUBLICA"
    
    $array_permitido = Get-Content $Arquivo_Permitidos
    
    foreach( $Pasta in (Dir -Path $Pasta_Raiz -Directory) ){
    
        if (-not ($array_permitido -contains $Pasta.Name) ){
            Move-Item $Pasta $Pasta_Pub -force
    	Move-Item *.* $Pasta_Pub -force
        }
    
    }

    quinta-feira, 16 de abril de 2015 19:50