Vamos automatizar operações de ficheiros com o PowerShell! Um guia de scripting para super-iniciantes
No artigo anterior, aprendemos 10 cmdlets úteis que formam a base do PowerShell. Provavelmente, já pôde sentir como cada comando devolve objetos poderosos e como, ao conectá-los com o pipeline, operações complexas se tornam possíveis.
Bem, depois de aprender as "palavras" (comandos), o próximo passo é finalmente combiná-las para criar "frases" ou "histórias" — ou seja, criar um script PowerShell. Um script, em poucas palavras, é um "manual de procedimentos para comandos". Uma vez criado, pode completar tarefas repetitivas e maçadoras com um único clique (ou um único comando).
Neste artigo, vamos abordar cenários concretos que os criadores web enfrentam frequentemente no seu trabalho diário, como a "configuração inicial de projetos", a "limpeza de ficheiros desnecessários" e "cópias de segurança simples", e explicar do zero como automatizá-los com scripts para super-iniciantes. Quando terminar de ler este artigo, também você terá o poder de criar a sua própria "varinha mágica"!
Preparação para a execução de scripts: Alterar a política de execução
Antes de poder criar e executar um script PowerShell (com a extensão .ps1), há uma coisa que precisa de preparar. Por segurança, o Windows restringe a execução de scripts por defeito. Vamos alterar esta restrição para que possa executar com segurança os scripts que criou localmente.
Primeiro, abra o PowerShell como administrador e verifique a política de execução atual.
Get-ExecutionPolicy
Provavelmente, será exibido "Restricted" (Restringido). Altere isto com o seguinte comando.
Set-ExecutionPolicy RemoteSigned
RemoteSigned é uma configuração segura e equilibrada para programadores, que significa "scripts criados localmente podem ser executados, mas scripts descarregados da Internet não, a menos que tenham uma assinatura de um editor fidedigno". Quando a mensagem de confirmação aparecer, escreva "Y" e prima a tecla Enter. Esta configuração só precisa de ser feita uma vez.
Exemplo prático 1: Gerar automaticamente a estrutura inicial de um projeto web
Quando se começa a criar um novo site, é um pouco aborrecido criar manualmente pastas como `images`, `css`, `js` e um ficheiro `index.html` de cada vez, não é? Vamos criar um script `New-Project.ps1` para automatizar esta tarefa.
Conteúdo do script
Cole o seguinte código num editor de texto e guarde-o com o nome `New-Project.ps1`.
# Usar o primeiro argumento passado na execução do script como nome do projeto
$projectName = $args[0]
# Criar o diretório com o nome do projeto
New-Item -Path ".\$projectName" -ItemType Directory
# Mover para o diretório criado
Set-Location -Path ".\$projectName"
# Criar todos os subdiretórios de uma vez
New-Item -Path ".\images" -ItemType Directory
New-Item -Path ".\css" -ItemType Directory
New-Item -Path ".\js" -ItemType Directory
# Criar os ficheiros de modelo HTML e CSS
New-Item -Path ".\index.html" -ItemType File
New-Item -Path ".\css\style.css" -ItemType File
Write-Host "O projeto '$projectName' está pronto!" -ForegroundColor Green
Execução do script
No PowerShell, navegue para o diretório onde guardou o script e execute o seguinte comando. `./` significa o diretório atual.
./New-Project.ps1 "MyNewSite"
Verificação do resultado
Após a execução, vamos verificar o conteúdo com `Get-ChildItem`.
Get-ChildItem -Path ".\MyNewSite"
Uma pasta com o nome especificado e, dentro dela, todas as subpastas e ficheiros necessários deverão ter sido criados num instante. Agora está livre da tediosa configuração inicial!
Exemplo prático 2: Limpar automaticamente ficheiros de download antigos
A seguir, um script um pouco mais avançado. Pensemos num script que procura e apaga automaticamente ficheiros antigos com mais de 30 dias que se acumularam na pasta "Downloads".
Conteúdo do script (primeiro em modo de confirmação segura)
Como apagar ficheiros imediatamente é arriscado, vamos primeiro criar uma versão segura que apenas exibe no ecrã que ficheiros *seriam* apagados se fosse executado. A chave é adicionar o modificador -WhatIf a Remove-Item.
# Caminho para a pasta que quer limpar
$targetFolder = "$HOME\Downloads"
# Apagar ficheiros com mais de quantos dias
$days = 30
# Calcular a data de referência
$limitDate = (Get-Date).AddDays(-$days)
Write-Host "A procurar ficheiros anteriores a [$limitDate] em [$targetFolder]..."
# Adicionar -WhatIf para realizar uma "simulação" da eliminação
Get-ChildItem -Path $targetFolder -File -Recurse | Where-Object { $_.LastWriteTime -lt $limitDate } | Remove-Item -WhatIf
Ao executar este script (guardado como `Clean-Downloads.ps1`, por exemplo), apenas será exibida uma lista dos ficheiros que seriam alvo de eliminação, com uma mensagem como "What if: Performing the operation "Remove File" on target...", mas na realidade nada será apagado.
Versão final do script (eliminação real)
Depois de ter confirmado com -WhatIf que os ficheiros alvo estão corretos, é altura da versão que apaga de verdade. Remova -WhatIf e, em seu lugar, adicione -Verbose para que seja exibido que ficheiros foram apagados, o que é mais amigável.
# (Código anterior omitido)
$limitDate = (Get-Date).AddDays(-$days)
Get-ChildItem -Path $targetFolder -File -Recurse | Where-Object { $_.LastWriteTime -lt $limitDate } | Remove-Item -Force -Verbose
-Force é uma opção para forçar a eliminação de ficheiros só de leitura. Com isto, a limpeza periódica de ficheiros fica concluída com um único comando.
Ejemplo práctico 3: Hacer una copia de seguridad de una carpeta específica en un ZIP con fecha
Por último, un script para automatizar una tarea de copia de seguridad importante para los creadores web. Comprime una carpeta especificada en un archivo ZIP que incluye la fecha y hora de ejecución en su nombre.
# A pasta da qual quer fazer uma cópia de segurança
$sourceFolder = "C:\path\to\your\project"
# Onde guardar o ficheiro da cópia de segurança
$destinationFolder = "D:\backups"
# Obter a data e hora atuais no formato AAAA MM dd-HHmm
$timestamp = Get-Date -Format "yyyyMMdd-HHmm"
# Decidir o nome do ficheiro ZIP a guardar
$zipFileName = "project-backup_$timestamp.zip"
$destinationPath = Join-Path -Path $destinationFolder -ChildPath $zipFileName
# Comprimir a pasta para fazer a cópia de segurança
Compress-Archive -Path $sourceFolder -DestinationPath $destinationPath
Write-Host "Cópia de segurança concluída: $destinationPath" -ForegroundColor Green
Se executar este script, poderá criar facilmente uma cópia de segurança com um nome claro, como project-backup_20250706-1130.zip.
Conclusão
Desta vez, apresentámos a forma básica de escrever scripts PowerShell e três exemplos concretos de scripts de automação úteis no dia a dia da criação web. O que achou?
- Configuração de projetos que se repetem
- Limpeza periódica de ficheiros
- Cópia de segurança de dados importantes
Ao converter estas tarefas manuais em scripts, reduzirá erros, poupará tempo e poderá concentrar-se em trabalhos mais criativos. O truque para criar scripts é "decompor os passos que realiza manualmente em cmdlets individuais e escrevê-los". Desafie-se a criar os seus próprios scripts para automatizar as "tarefas maçadoras" que o rodeiam!
O mundo do PowerShell ainda é muito profundo. No próximo artigo, vamos comparar a fundo as diferenças entre o PowerShell e a boa e velha (?) Linha de Comandos, que muita gente confunde, com diagramas explicativos!
Compare e entenda as diferenças entre o PowerShell e o cmd [com diagramas]