DEV Community

1

Criando um script de backup

Seguindo com a nossa serie, vamos começar a fazer projetos com coisas do dia a dia, iniciando com um script para fazer backups.

Vamos fazer uma coisa bem básica, pegar uma lista de pasta de um arquivo e salva-las em uma pasta dentro de nosso OneDrive.
Para ocupar menos espaço, vamos salvar cada uma dessas pastas comprimindo elas.

Nosso algoritmo vai ser algo como:

  1. Receber a lista de pastas
  2. Criar uma pasta no OneDrive com um nome personalizado
  3. Fazer a copia de capa pasta, comprimindo elas no processo

Qual vai ser a estrutura da pasta no OneDrive?

  1. Vamos criar uma pasta geral chamada Backups
  2. Utilizando data e hora, vamos criar nela uma pasta para salvar o backup atual

Partindo do que já vimos, precisamos para esse projeto aprender duas coisas novas, como pegar informações relacionadas a datas e como comprimir arquivos.

Trabalhando com data e hora
Temos uma função nativa do Powershell para receber essas informações, ela se chama Get-Date, que nos retorna o dia da semana, do mês, qual o mês e ano, e a hora atual incluindo os segundos (conforme o idioma do sistema operacional).
Mas para criar uma pasta com esse nome seria bem complicado e não seria o ideal, então vamos utilizar um parâmetro para formatar esse resultado. Utilizando o parâmetro Format podemos definir exatamente quais informações queremos, conforme algumas letras chave.
Para o nosso exemplo, vamos utilizar "hhmmss-ddMMyy", assim vamos gerar um código com a hora, minuto, segundo, dia, mês e ano.

Comprimindo arquivos
Para comprimirmos arquivos no formato ZIP, vamos utilizar o comando Compress-Archive, sua sintaxe é bem simples, informamos qual o arquivo e qual o local onde queremos colocar o arquivo após o processo.

Certo, agora como isso ficaria em código?

# Funcao para validar as pastas
# Vamos modifica-la para esse projeto, passando como parametro o caminho completo
function Validar-Pasta {
param (
# Aqui definimos qual a posicao e se é obrigatorio ou nao o parametro
# O contador de posicoes comeca em 0, é importante lembrar disso
[parameter(position=0,Mandatory=$True)]
$caminhoPasta
)
# Validamos se o caminho existe, salvando a resposta em uma variavel
$pastaValidacao = Test-Path -Path "$caminhoPasta"
# Se ela já existe, exibimos uma mensagem de erro
if ($pastaValidacao) {
# Informamos que a pasta já existe
Write-Host "Já existe o diretorio: $caminhoPasta"
}
# Se a pasta existe, executamos o bloco de codigo
else {
# Executar o comando de criação de pasta
$esconderRetorno = New-Item -Path "$caminhoPasta" -ItemType "Directory" # Vamos jogar isso numa variavel para nao aparecer o retorno padrao na tela
# Mostrar mensagem de confirmação na tela
Write-Host "Criado diretorio: $caminhoPasta"
}
}
# Configuracoes
# Como a ideia é criar um script automatizado, vamos definir os caminhos nessa seção, para não precisarmos informar durante o uso
$raizBackup = "$env:USERPROFILE\OneDrive\Backups" # Caminho comum do OneDrive, pode variar caso tenha modificado algo no sistema
$caminhoLista = "$env:USERPROFILE\Desktop\pastasBackups.txt" # Coloquei para pegar da area de trabalho
# Validando se a pasta raiz já existe
Validar-Pasta $raizBackup
# Criando nosso identificador
$identificador = Get-Date -Format hhmmss-ddMMyy
# Configurando nossa pasta destino
$pastaBackup = "$raizBackup\$identificador"
# Criamos nossa pasta destino
Validar-Pasta $pastaBackup
# Recebe as pastas da lista
$pastas = Get-Content -Path $caminhoLista
# Fazemos o processo para cada pasta na lista
foreach ($pasta in $pastas) {
try {
# Recebendo o nome da pasta com base no caminho
$infoPasta = Get-ItemProperty $pasta
$nomePasta = $infoPasta.Name
Compress-Archive -Path "$pasta\*" -DestinationPath $pastaBackup\$nomePasta.zip
Write-Host "Feito o Backup da pasta $nomePasta"
}
catch {
$ErrorMessage = $_.Exception.Message # Recebe o erro
Write-Host "Ocorreu um erro durante o backup da pasta $nomePasta" # Mostra a mensagem
Write-Host "Erro: $ErrorMessage"
}
}
# Informa que o procedimento foi concluido
Write-Host "O script terminou"
view raw Backup.ps1 hosted with ❤ by GitHub

Para deixar nosso código mais bonito, utilizamos uma função nova chamada Get-ItemProperty, com ela pegamos o nome da pasta com base nos caminhos informados. Podemos usar isso também para melhorar nossa função de Validar-Pastas, que foi ligeiramente modificada para esse projeto.

É importante lembrar que precisamos do caminho completo da pasta em nossa lista, exemplo: C:\temp
E colocando sempre um por linha.

Com isso, conseguimos criar uma rotina simples de backup em conjunto com o OneDrive. Recomendo fortemente que utilize a nuvem para salvar seus arquivos, isso vai te ajudar muito no caso de um problema no computador ou caso precise acessar esses arquivos em outro dispositivo.

Existem formas muito mais praticas de fazer backups de arquivos pessoais, principalmente das pastas Documentos, Desktop, Imagens..
Mas com a ideia desse script, pode aumentar seu leque de opções.

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay