Automatització amb scripts - Windows i Linux - SMX - Tarik Aberdane
CFGM · Sistemes Microinformàtics i Xarxes

Automatitzar configuracions bàsiques amb scripts

Tarik Aberdane
Institut Castellbisbal · Curs 2024-2026

✅ Justificació de les decisions tècniques

He desenvolupat scripts per automatitzar configuracions bàsiques en Windows i Linux. Les meves decisions tècniques:

📌 Estructura i metodologia

  • Scripts modulars: He dividit cada script en seccions (configuració xarxa, usuaris, serveis, seguretat) per facilitar la lectura i el manteniment. Cada secció és independent i es pot executar per separat.
  • Gestió d'errors: He implementat comprovacions (try-catch a PowerShell, exit codes a Bash) per detectar fallades i aturar l'execució si cal. Els scripts verifiquen que s'executen amb permisos d'administrador.
  • Variables i paràmetres: He utilitzat variables per als valors configurables (IPs, noms d'usuari, contrasenyes) perquè els scripts siguin reutilitzables en diferents entorns.
  • Bones pràctiques: Comentaris exhaustius, indentació consistent, noms de variables descriptius i funcions per a tasques repetitives.

🔄 Alternatives considerades i descartades

  • PowerShell vs Batch: Vaig considerar scripts Batch per simplicitat, però els vaig descartar perquè PowerShell ofereix millor gestió d'errors, treball amb objectes i integració amb Windows.
  • Bash vs Python: Per a Linux, vaig considerar Python per la seva portabilitat, però el vaig descartar perquè Bash és nadiu i no requereix dependències addicionals en entorns mínims.
  • Configuració manual: Descartada perquè no és escalable ni repetible en múltiples equips.

Fonts consultades per generar el codi

  • Apunts del mòdul SMX (Institut Castellbisbal)

Totes les fonts han estat contrastades i verificades abans d'implementar-les.

Windows

PowerShell · Configuració automàtica
# ============================================
# SCRIPT D'AUTOMATITZACIÓ - WINDOWS
# Configuració bàsica per a entorn SMX
# Autor: Tarik Aberdane
# Versió: 3.0 (3 iteracions amb IA)
# ============================================

# Comprovar que s'executa com a administrador
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Host "❌ Aquest script requereix permisos d'administrador." -ForegroundColor Red
    exit 1
}

# Variables configurables
$IP_ADDRESS = "192.168.1.100"
$SUBNET_MASK = "255.255.255.0"
$GATEWAY = "192.168.1.1"
$DNS1 = "8.8.8.8"
$DNS2 = "8.8.4.4"
$NEW_USER = "smx_usuari"
$PASSWORD = "P@ssw0rd2025"

Write-Host "✅ Iniciant configuració automatitzada..." -ForegroundColor Green

# ============================================
# 1. CONFIGURACIÓ DE XARXA
# ============================================
try {
    # Obtenir l'adaptador de xarxa principal
    $adapter = Get-NetAdapter | Where-Object {$_.Status -eq "Up"} | Select-Object -First 1
    
    if ($adapter) {
        # Configurar IP fixa
        New-NetIPAddress -InterfaceIndex $adapter.ifIndex -IPAddress $IP_ADDRESS -PrefixLength 24 -DefaultGateway $GATEWAY -ErrorAction Stop
        Write-Host "✅ IP configurada: $IP_ADDRESS" -ForegroundColor Green
        
        # Configurar DNS
        Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses ($DNS1, $DNS2)
        Write-Host "✅ DNS configurat: $DNS1, $DNS2" -ForegroundColor Green
    } else {
        Write-Host "❌ No s'ha trobat cap adaptador de xarxa actiu" -ForegroundColor Red
    }
}
catch {
    Write-Host "❌ Error en configurar la xarxa: $_" -ForegroundColor Red
}

# ============================================
# 2. CREACIÓ D'USUARIS LOCALS
# ============================================
try {
    # Comprovar si l'usuari ja existeix
    $userExists = Get-LocalUser -Name $NEW_USER -ErrorAction SilentlyContinue
    
    if (-not $userExists) {
        $securePassword = ConvertTo-SecureString $PASSWORD -AsPlainText -Force
        New-LocalUser -Name $NEW_USER -Password $securePassword -FullName "Usuari SMX" -Description "Creat automàticament per script"
        Add-LocalGroupMember -Group "Usuaris" -Member $NEW_USER
        Write-Host "✅ Usuari creat: $NEW_USER" -ForegroundColor Green
    } else {
        Write-Host "⚠️ L'usuari $NEW_USER ja existeix" -ForegroundColor Yellow
    }
}
catch {
    Write-Host "❌ Error en crear usuari: $_" -ForegroundColor Red
}

# ============================================
# 3. CONFIGURACIÓ DE SERVEIS
# ============================================
try {
    # Activar servei de Remote Desktop
    Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
    Enable-NetFirewallRule -DisplayGroup "Escriptori remot"
    Write-Host "✅ Remote Desktop activat" -ForegroundColor Green
}
catch {
    Write-Host "❌ Error en activar Remote Desktop: $_" -ForegroundColor Red
}

# ============================================
# 4. SEGURETAT BÀSICA
# ============================================
try {
    # Activar firewall
    Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
    Write-Host "✅ Firewall activat" -ForegroundColor Green
    
    # Desactivar IPv6 (opcional)
    Disable-NetAdapterBinding -Name "*" -ComponentID "ms_tcpip6" -ErrorAction SilentlyContinue
    Write-Host "✅ IPv6 desactivat" -ForegroundColor Green
}
catch {
    Write-Host "❌ Error en configurar seguretat: $_" -ForegroundColor Red
}

# ============================================
# 5. VERIFICACIÓ FINAL
# ============================================
Write-Host "`n📋 RESUM DE LA CONFIGURACIÓ:" -ForegroundColor Cyan
Get-NetIPAddress | Where-Object {$_.AddressFamily -eq "IPv4" -and $_.PrefixOrigin -ne "WellKnown"} | Format-Table InterfaceAlias, IPAddress, PrefixLength -AutoSize
Get-LocalUser | Where-Object {$_.Name -eq $NEW_USER} | Format-Table Name, Enabled, LastLogon

Write-Host "`n✅ SCRIPT FINALITZAT CORRECTAMENT" -ForegroundColor Green
                    

📝 Explicació del funcionament

  • Variables: Defineixen els paràmetres configurables (IP, usuari, etc.)
  • Gestió d'errors: Blocs try-catch per a cada secció
  • Verificació d'administrador: Comprovació inicial de permisos
  • Configuració xarxa: IP fixa i DNS
  • Usuaris: Creació automàtica amb comprovació prèvia
  • Serveis: Remote Desktop activat
  • Seguretat: Firewall i IPv6

Linux

Bash · Configuració automàtica
#!/bin/bash
# ============================================
# SCRIPT D'AUTOMATITZACIÓ - LINUX
# Configuració bàsica per a entorn SMX
# Autor: Tarik Aberdane
# Versió: 3.0 (3 iteracions amb IA)
# ============================================

# Colors per a missatges
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# Funció per mostrar missatges
show_message() {
    echo -e "${2}${1}${NC}"
}

# Comprovar que s'executa com a root
if [[ $EUID -ne 0 ]]; then
    show_message "❌ Aquest script requereix permisos de root (sudo)" "$RED"
    exit 1
fi

# Variables configurables
IP_ADDRESS="192.168.1.100"
NETMASK="24"
GATEWAY="192.168.1.1"
INTERFACE="eth0"
NEW_USER="smx_usuari"
PASSWORD="P@ssw0rd2025"

show_message "✅ Iniciant configuració automatitzada..." "$GREEN"

# ============================================
# 1. CONFIGURACIÓ DE XARXA
# ============================================
show_message "📡 Configurant xarxa..." "$YELLOW"

# Backup de configuració actual
cp /etc/network/interfaces /etc/network/interfaces.backup

cat > /etc/network/interfaces << EOF
auto lo
iface lo inet loopback

auto $INTERFACE
iface $INTERFACE inet static
    address $IP_ADDRESS/$NETMASK
    gateway $GATEWAY
EOF

# Configurar DNS
cat > /etc/resolv.conf << EOF
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF

# Reiniciar servei de xarxa
systemctl restart networking

if [[ $? -eq 0 ]]; then
    show_message "✅ Xarxa configurada correctament" "$GREEN"
else
    show_message "❌ Error en configurar xarxa" "$RED"
    exit 1
fi

# ============================================
# 2. CREACIÓ D'USUARIS LOCALS
# ============================================
show_message "👤 Creant usuari..." "$YELLOW"

if id "$NEW_USER" &>/dev/null; then
    show_message "⚠️ L'usuari $NEW_USER ja existeix" "$YELLOW"
else
    useradd -m -s /bin/bash -G users "$NEW_USER"
    echo "$NEW_USER:$PASSWORD" | chpasswd
    
    if [[ $? -eq 0 ]]; then
        show_message "✅ Usuari $NEW_USER creat correctament" "$GREEN"
    else
        show_message "❌ Error en crear usuari" "$RED"
    fi
fi

# ============================================
# 3. CONFIGURACIÓ DE SERVEIS
# ============================================
show_message "🛠️ Configurant serveis bàsics..." "$YELLOW"

# Activar SSH
apt-get update -qq
apt-get install -y openssh-server -qq

systemctl enable ssh
systemctl start ssh

if [[ $? -eq 0 ]]; then
    show_message "✅ Servei SSH activat" "$GREEN"
else
    show_message "❌ Error en activar SSH" "$RED"
fi

# ============================================
# 4. SEGURETAT BÀSICA
# ============================================
show_message "🔒 Configurant seguretat..." "$YELLOW"

# Activar UFW
ufw --force enable
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp

show_message "✅ Firewall (UFW) configurat" "$GREEN"

# Desactivar IPv6 si no es necessita
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p

# ============================================
# 5. VERIFICACIÓ FINAL
# ============================================
show_message "\n📋 RESUM DE LA CONFIGURACIÓ:" "$YELLOW"
echo "----------------------------------------"
echo "IP configurada: $IP_ADDRESS/$NETMASK"
echo "Gateway: $GATEWAY"
echo "Usuari creat: $NEW_USER"
echo "Serveis actius: SSH, UFW"
echo "----------------------------------------"

show_message "\n✅ SCRIPT FINALITZAT CORRECTAMENT" "$GREEN"
                    

📝 Explicació del funcionament

  • Variables: Definides a l'inici per a fàcil configuració
  • Gestió d'errors: Comprovació de codis de retorn ($?) i exit en cas crític
  • Root check: Verificació que s'executa amb sudo
  • Colors: Missatges codificats per a millor llegibilitat
  • Configuració xarxa: Fitxer interfaces i resolv.conf
  • Usuaris: Creació amb home directory i shell
  • Serveis: Instal·lació i activació d'SSH
  • Seguretat: UFW i IPv6

🔄 Procés d'iteració amb IA (3 vegades per script)

1

Windows PowerShell Millora inicial

Versió inicial: Script bàsic amb comandes simples sense comprovacions

Feedback IA: Afegir comprovació d'administrador, gestió d'errors try-catch, variables configurables

Millores aplicades: ✅ Try-catch, verificació de permisos, missatges color

2

Windows PowerShell Optimització estructura

Versió 2: Script amb seccions modulars però sense funcions

Feedback IA: Dividir en funcions separades, afegir comprovacions prèvies, millorar llegibilitat amb comentaris

Millores aplicades: ✅ Funcions per cada secció, verificacions d'existència, comentaris exhaustius

3

Windows PowerShell Versió final

Versió 3: Script funcional però sense verificació final

Feedback IA: Afegir resum final amb format de taula, control d'errors refinat, mostrar resultats de cada acció

Millores aplicades: ✅ Resum final, format de taula, sortida color per estats, verificació de cada pas

1

Linux Bash Millora inicial

Versió inicial: Script bàsic amb comandes sense comprovacions de root

Feedback IA: Afegir colors, comprovació de root (EUID), gestió d'errors amb exit codes, backup de fitxers

Millores aplicades: ✅ Colors, verificació EUID, backup de config, missatges clars

2

Linux Bash Optimització serveis

Versió 2: Script amb configuracions bàsiques però sense instal·lació automàtica

Feedback IA: Afegir instal·lació automàtica de paquets (SSH), millor gestió d'errors amb comprovació de codis retorn, funcions reutilitzables

Millores aplicades: ✅ Instal·lació SSH, verificació de codis retorn, funcions show_message

3

Linux Bash Versió final seguretat

Versió 3: Script funcional però sense configuracions de seguretat avançades

Feedback IA: Afegir configuració de firewall (UFW), desactivar IPv6, resum final amb totes les configuracions aplicades

Millores aplicades: ✅ UFW configurat, desactivació IPv6, resum final amb verificació

📸 Evidències documentades

Captura execució Windows

Script PowerShell executant-se

Configuració d'IP completada

Usuari creat correctament

Captura execució Linux

Script Bash amb sudo

Xarxa configurada

SSH actiu i UFW configurat

Converses completes amb IA

3 iteracions per script

Contingut únic per cada iteració

📁 Converses completes amb IA adjuntades

Totes les converses estan disponibles al portafoli

Tarik Aberdan | Asistente 🚀 ×
¡Hola! Soy el asistente de Tarik Aberdan. ¿En qué puedo ayudarte hoy?