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:
- Receber a lista de pastas
- Criar uma pasta no OneDrive com um nome personalizado
- Fazer a copia de capa pasta, comprimindo elas no processo
Qual vai ser a estrutura da pasta no OneDrive?
- Vamos criar uma pasta geral chamada Backups
- 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" |
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.
Top comments (0)