fbpx

Crie um backup automatizado no Windows com PowerShell e Tarefas Agendadas

Crie um backup automatizado no Windows com PowerShell e Tarefas Agendadas

Na infomática, o termo “backup” se refere à cópia de segurança de dados para posterior restauração em caso de perdas causadas por problemas de hardware e software.

Um dos pontos mais importantes do backup é que cópia de segurança nunca pode ser armazenada no mesmo dispositivo de armazenamento. Na verdade, é recomendável que as cópias de segurança fiquem armazenadas geograficamente distantes de sua original.

Assim, caso haja problemas com os arquivos originais, o usuário poderá recorrer a sua cópia de segurança e fazer a restauração dos arquivos, minimizando assim os problemas causados por eventuais perdas.

Hardware e software são substituíveis. Problemas de hardware? Substitua o dispositivo. Problemas de software? Reinstale-o. E quanto a suas informações?

Apesar de existir diversos softwares e hardwares destinados a realização dos mais diversos tipos de backup, para o usuário comum é possível realizar operações simples do tipo “copiar-colar” armazenando arquivos em serviços da nuvem, como o OneDrive, por exemplo. Entretanto, muitos usuários se esquecem de fazer o backup de tempos em tempos, expondo-se a riscos desnecessários.

Neste pequeno tutorial, irei mostrar como é possível criar um backup automatizado no Windows, fazendo com que uma certa pasta seja copiada automaticamente de tempos em tempos para uma pasta do OneDrive.

Apesar de estar sincronizada com o computador local, uma pasta do OneDrive armazena os arquivos na nuvem, protegendo o usuário de possíveis perdas. Então, mãos à obra!

Passo nº 1: criar uma pasta destino

Seguindo o princípio de que o backup deve ficar geograficamente distante dos arquivos originais, você deve criar uma pasta no seu ambiente do OneDrive integrado do Windows.

Caso não saiba como fazer isso, visite o site da Ajuda do OneDrive.

Passo nº 2: criar o script PowerShell

O Windows PowerShell é um poderoso framework baseado na plataforma .Net Framework. O PowerShell consiste em um conjunto de ferramentas para automação e gerenciamento de tarefas do Sistema Operacional, incluindo um poderoso shell de linha de comando.

Diferente dos tradicionais shells de linha de comando, como o prompt, ele não retorna textos e sim objetos da plataforma .Net Framework. Logo, ele é mais poderos que o prompt.

Os scripts do PowerShell possuem extensão “ps1” e são formados por um conjunto de comandos que suportam objetos como entrada e saída. Para mais informações sobre o PowerShell, acesse a documentação oficial da Microsoft clicando aqui.

No nosso exemplo, iremos criar um script que copia uma pasta local para uma pasta do OneDrive. Veja o seguinte código comentado que foi editado usando o PowerShell ISE, o ambiente de programação do PowerShell.

#define a pasta de origem - o caractere "*" significa que iremos pegar tudo, arquivos e pastas. 
$sourcePath = "C:\Users\jlgre\Documents\teste\*"
 
#define a pasta do one drive de destino.
$destinyPath = "C:\Users\jlgre\OneDrive\backup"
 
#pega a data atual no formato dia-mês-ano para fazer o arquiv de log
$date = Get-Date -Format d-m-yyy
 
#Copia da origem para o destino - o parâmetro "Recurse" diz que vai copiar todas as subpastas
#O parâmetro "Verbose" diz que as ações serão mostradas
#para gravar as ações realizadas em um arquivo de log, vamos direcionar a saída do comando (símbolo >) para o arquivo que possui um nome composto por "log" mais a data
Copy-Item $sourcePath $destinyPath -Recurse -Verbose > "$destinyPath\log-$date.txt"

Crie uma pasta com o nome scripts_ps na unidae C: do seu computador. Depois salve o arquivo com o script PowerShell com o nome ps_backup.ps1. O caminho completo do arquivo deverá ser c:\scripts_ps\backup.ps1.

Passo 3: políticas de execução

Por questões de segurança, os scripts do PowerShell não podem ser executados sem uma prévia autorização. No contexto do nosso exemplo, iremos atualizar a Política de Execução (Execution Policy) para permitir que os scripts criados no computador possam ser executados normalmente.

Considerando a figura abaixo, abra o PowerShell cliando em Iniciar e depois digite PowerShell (1). No ícone do PowerShell, clique com o botão direito do mouse e selecione a opção “Run as Adminstrator” (2) ou Executar como Administrador.

Executar o PowerShell como Administrador.

O código PowerShell comentado abaixo configura a política de execução para “Unrestricted”, ou seja, irrestrito. Isso significa que qualquer script poderá ser executado. Obviamente, isso não é seguro, pois permite a execução de scripts de terceiros, inclusive os que podem causar problemas no seu Sistema Operacional. Em uma outra postagem eu mostro como assinar digitalmente o script.

A cada linha do código abaixo, digite <Enter> para confirmar sua execução.

#Verifica a política de execução corrente
Get-ExecutionPolicy
 
#Configura a política de execução para "Unrestricted" (irrestrita)
#O parâmetro -Force irá executar o comando sem pedir confirmação
Set-ExecutionPolicy Unrestricted -Force

Passo 4: testar o script

Ainda no PowerShell, vá até a pasta em que o script foi salvo e execute-o uma vez para fins de teste. O código comentado abaixo mostra quais comandos precisam ser executados. Lembre-se de pressionar <Enter> após cada um deles.

#muda a pasta corrente para a pasta em que foi salvo o script, segundo o passo 2
Set-Location c:\scripts_ps
 
#executa o script de backup
.\backup.ps1

Se você executou os passos corretamente até aqui, então na sua pasta destino do OneDrive, deve haver uma cópia de todo o conteúdo da pasta de origem.

Passo 5: automatizando o backup

Para automatizar o backup será necessário usar o recurso “Tarefas Agendadas” do Windows. Esse recurso permite executar aplicações e scripts de maneira automática, segundo um horário predefinido ou evento disparado.

  1. Clique em iniciar e digite “Tarefas Agendadas” ou “Scheule Tasks” na versão em inglês.
  2. No menu na parte superior direita, clique em “Nova Tarefa Básica” (New Basic Task – em inglês).
  3. Siga os passos mostrados nas imagens abaixo:
Digite o nome da tarefa e uma breve descrição. Clique em Next.
Selecione o intervalo e execução. Nesse exemplo, selecioamos diariamente (daily). Clique em Next.
Digite quando ela irá iniciar e por quantos idas você deseja executá-la. Clique em Next.
Selecione o que será executado. No nosso exemplo executaremos um programa. Clique em Next.
Observe os números na imagem acima

No campo “Program/Script” digite “powershell.exe” (sem aspas), como mostra o número 1 na figura acima.

No campo arguments, onde está o número 2 na figur acima, iremos digitar -command acrescido do local do script com aspas, exatamente como abaixo:

-command "&c:\scripts_ps\backup.ps1" 

Depois disso, clique em Next.

Pra finalizar, confirme as informaçõe e clique em “Finish”.

Pronto! Agora é só esperar a primeira execução e confirmar se deu certo.

Conclusão

Apesar das limitações de executar apenas 1 vez por dia, esse tutorial pode ajudá-lo a fazer um backup diário automaticamente, sem que você precise lembrar todos os dias.

Uma outra limitação está no fato de que ele será executado apenas por 99 dias consecutivos. Para contornar esse problema, convido o leitor a ser curioso e explorar os recursos das Tarefas Agendadas. Assim, será possível, por exemplo, executar scripts de backup várias vezes ao dia, de acordo com a necessidade de cada usuário.

Uma outra questão é que a política de execução (Execution Policy) para scripts do PowerShell está configurada como irrestrita. Isso representa uma vulnerabilidade, considerando que scripts maliciosos podem ser executados em seu computador. Para resolver isso é necessário assinar digitalmente os scripts.

Enfim, espero ter ajudado!

Jorge Luís Gregório

Jorge Luís Gregório

Professor e entusiasta de tecnologia, estudioso da cultura NERD e fã de quadrinhos, animes e games. Mais um pai de menino, casado com a mulher mais linda da galáxia e cristão convicto. Gosto de ler ficção científica e discutir tecnologia, filmes, seriados, teologia, filosofia e política. Quer falar sobre esses e diversos outros assuntos? Venha comigo!