🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

¡Automatiza las operaciones de archivos con PowerShell! Guía de scripting para principiantes

En el artículo anterior, aprendimos 10 cmdlets útiles que son la base de PowerShell. Espero que hayas podido experimentar cómo cada comando devuelve objetos potentes y cómo, al conectarlos con la canalización, se pueden realizar procesos complejos.

Bien, una vez que has aprendido las "palabras" (comandos), el siguiente paso es combinarlas para crear "frases" o "historias", es decir, crear un script de PowerShell. Un script, en pocas palabras, es un "manual de procedimientos de comandos". Una vez que lo has creado, puedes completar tareas repetitivas y tediosas con un solo clic (o un solo comando).

En este artículo, abordaremos escenarios concretos a los que los creadores web se enfrentan a menudo en su trabajo diario, como la "configuración inicial de proyectos", la "limpieza de archivos innecesarios" y las "copias de seguridad sencillas", y explicaremos desde cero cómo automatizarlos con scripts para principiantes. ¡Cuando termines de leer este artículo, tú también tendrás el poder de crear tu propia "varita mágica"!


Preparación para la ejecución de scripts: Cambiar la directiva de ejecución

Antes de crear y ejecutar un script de PowerShell (con la extensión .ps1), hay una cosa que debes preparar. Por seguridad, Windows restringe la ejecución de scripts en su estado inicial. Vamos a cambiar esta restricción para que puedas ejecutar de forma segura los scripts que has creado localmente.

Primero, abre PowerShell como administrador y comprueba la directiva de ejecución actual.

Get-ExecutionPolicy

Probablemente se mostrará "Restricted" (Restringido). Cámbialo con el siguiente comando.


Set-ExecutionPolicy RemoteSigned

RemoteSigned es una configuración segura y equilibrada para los desarrolladores, que significa "los scripts creados localmente se pueden ejecutar, pero los scripts descargados de Internet no, a menos que tengan una firma de un editor de confianza". Cuando aparezca el mensaje de confirmación, introduce "Y" y pulsa la tecla Enter. Esta configuración solo hay que hacerla una vez.


Ejemplo práctico 1: Generar automáticamente la estructura inicial de un proyecto web

Cuando empiezas a crear un nuevo sitio web, es un poco tedioso crear manualmente carpetas como `images`, `css`, `js` y un archivo `index.html` cada vez, ¿verdad? Vamos a crear un script `New-Project.ps1` para automatizar esta tarea.

Contenido del script

Pega el siguiente código en un editor de texto y guárdalo con el nombre `New-Project.ps1`.

# Usa el primer argumento pasado al ejecutar el script como nombre del proyecto
$projectName = $args[0]

# Crea el directorio con el nombre del proyecto
New-Item -Path ".\$projectName" -ItemType Directory

# Muévete al directorio creado
Set-Location -Path ".\$projectName"

# Crea todos los subdirectorios a la vez
New-Item -Path ".\images" -ItemType Directory
New-Item -Path ".\css" -ItemType Directory
New-Item -Path ".\js" -ItemType Directory

# Crea los archivos de plantilla HTML y CSS
New-Item -Path ".\index.html" -ItemType File
New-Item -Path ".\css\style.css" -ItemType File

Write-Host "¡El proyecto '$projectName' está listo!" -ForegroundColor Green

Ejecución del script

En PowerShell, navega hasta el directorio donde guardaste el script y ejecuta el siguiente comando. `./` significa el directorio actual.

./New-Project.ps1 "MyNewSite"

Comprobación del resultado

Después de ejecutarlo, vamos a comprobar el contenido con `Get-ChildItem`.

Get-ChildItem -Path ".\MyNewSite"

Deberías ver que se ha creado en un instante una carpeta con el nombre especificado y, dentro de ella, todas las subcarpetas y archivos necesarios. ¡Ya te has librado de la tediosa configuración inicial!


Ejemplo práctico 2: Limpiar automáticamente archivos antiguos de la carpeta de descargas

A continuación, un script un poco más avanzado. Pensemos en un script que busque y elimine automáticamente los archivos antiguos de más de 30 días que se han acumulado en la carpeta "Descargas".

Contenido del script (primero en modo de confirmación segura)

Como eliminar archivos de golpe es arriesgado, primero vamos a crear una versión segura que solo muestre en pantalla qué archivos se eliminarían si se ejecutara. La clave es añadir el modificador -WhatIf a Remove-Item.

# Ruta de la carpeta que quieres limpiar
$targetFolder = "$HOME\Downloads"
# Cuántos días de antigüedad deben tener los archivos para ser eliminados
$days = 30
# Calcula la fecha de referencia
$limitDate = (Get-Date).AddDays(-$days)

Write-Host "Buscando archivos anteriores a [$limitDate] en [$targetFolder]..."

# Añade -WhatIf para realizar una "simulación" de la eliminación
Get-ChildItem -Path $targetFolder -File -Recurse | Where-Object { $_.LastWriteTime -lt $limitDate } | Remove-Item -WhatIf

Al ejecutar este script (guardado como `Clean-Downloads.ps1`, por ejemplo), solo se mostrará una lista de los archivos que serían eliminados, con un mensaje como "What if: Performing the operation "Remove File" on target...", pero en realidad no se eliminará nada.


Versión final del script (eliminación real)

Una vez que hayas confirmado con -WhatIf que los archivos seleccionados son correctos, llega el momento de la versión que elimina de verdad. Elimina -WhatIf y, en su lugar, añade -Verbose para que se muestre qué archivos se han eliminado, lo que resulta más amigable.

# (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 es una opción para forzar la eliminación de archivos de solo lectura. Con esto, la limpieza periódica de archivos se completa con un solo 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.

# Carpeta de la que quieres hacer una copia de seguridad
$sourceFolder = "C:\path\to\your\project"
# Dónde guardar el archivo de la copia de seguridad
$destinationFolder = "D:\backups"

# Obtiene la fecha y hora actuales en formato AAAA MM dd-HHmm
$timestamp = Get-Date -Format "yyyyMMdd-HHmm"
# Decide el nombre del archivo ZIP a guardar
$zipFileName = "project-backup_$timestamp.zip"
$destinationPath = Join-Path -Path $destinationFolder -ChildPath $zipFileName

# Comprime la carpeta para hacer la copia de seguridad
Compress-Archive -Path $sourceFolder -DestinationPath $destinationPath

Write-Host "¡Copia de seguridad completada: $destinationPath" -ForegroundColor Green

Si ejecutas este script, podrás crear fácilmente una copia de seguridad con un nombre claro, como project-backup_20250706-1130.zip.


Resumen

En esta ocasión, te hemos presentado la forma básica de escribir scripts de PowerShell y tres ejemplos concretos de scripts de automatización útiles en el día a día de la creación web. ¿Qué te ha parecido?

Al convertir estas tareas manuales en scripts, reducirás errores, ahorrarás tiempo y podrás concentrarte en trabajos más creativos. El truco para crear scripts es "descomponer los pasos que realizas manualmente en cmdlets individuales y escribirlos". ¡Anímate a crear tus propios scripts para automatizar las "tareas tediosas" que te rodean!

El mundo de PowerShell es todavía muy profundo. En el próximo artículo, compararemos a fondo las diferencias entre PowerShell y el viejo (¿y querido?) Símbolo del sistema, que mucha gente confunde, ¡con diagramas explicativos!

Compara y entiende las diferencias entre PowerShell y cmd [con diagramas]