Windows, tercera parte

PowerShell avanzado

Administración del sistema

Seguridad y permisos

Automatización

WSL y desarrollo

Todo mezclado con ejercicios prácticos

Vamos a ir bloque por bloque, con ejercicios reales, como si estuviéramos montando tu “caja de herramientas” de Windows.

Empezamos por lo lógico: PowerShell base (pero ya con mentalidad avanzada). Cuando dominemos esto, pasamos al siguiente bloque.

1️⃣ Primer bloque: PowerShell como usuario avanzado

Objetivo: que te sientas tan cómodo en PowerShell como en Bash.

Ejercicio 1: abrir PowerShell y entender dónde estás

  1. En Windows, abre PowerShell (no ISE, no Terminal de Windows de momento).
  2. Ejecuta:powershell$PSVersionTable Tarea: dime qué versión de PowerShell tienes (PSVersion).
  3. Ahora mira tu ruta actual:powershellGet-Location Tarea: comprueba si estás en algo tipo C:\Users\david.

Ejercicio 2: moverte como en Linux, pero con PowerShell

  1. Lista archivos:powershellGet-ChildItem
  2. Entra en tu Escritorio:powershellSet-Location Desktop Get-ChildItem
  3. Crea una carpeta de pruebas:powershellNew-Item -ItemType Directory -Name "ps-tests"
  4. Entra en ella:powershellSet-Location ps-tests

Tarea: crea dentro un archivo vacío llamado hola.txt:

powershell

New-Item -ItemType File -Name "hola.txt"

Ejercicio 3: entender que todo son objetos

  1. Ejecuta:powershellGet-ChildItem
  2. Ahora:powershellGet-ChildItem | Get-Member Verás que cada elemento tiene propiedades (Name, Length, CreationTime, etc.).
  3. Saca solo los nombres:powershellGet-ChildItem | Select-Object Name
  4. Saca nombre y tamaño:powershellGet-ChildItem | Select-Object Name, Length

Tarea: muestra solo los archivos de la carpeta actual ordenados por tamaño descendente:

powershell

Get-ChildItem | Sort-Object Length -Descending

Ejercicio 4: procesos al estilo “ps aux”, pero bien

  1. Lista procesos:powershellGet-Process
  2. Filtra por nombre:powershellGet-Process | Where-Object { $_.ProcessName -like "*ssh*" }
  3. Muestra solo nombre e ID:powershellGet-Process | Select-Object ProcessName, Id

Tarea: mata un proceso concreto (elige algo inofensivo, tipo notepad):

powershell

Stop-Process -Name notepad

Ejercicio 5: red básica

  1. Haz un “ping” a Google:powershellTest-Connection google.com -Count 4
  2. Mira tus IPs:powershellGet-NetIPAddress

Tarea: filtra solo las IPv4:

powershell

Get-NetIPAddress | Where-Object { $_.AddressFamily -eq "IPv4" }

2️⃣ Mini reto del bloque

En tu carpeta ps-tests, haz esto:

  1. Crea 5 archivos de texto: a.txt, b.txt, c.txt, d.txt, e.txt.
  2. Escribe dentro de cada uno una línea distinta usando PowerShell:powershell"Soy el archivo A" | Set-Content a.txt
  3. Lista los archivos mostrando: nombre, tamaño y fecha de creación, ordenados por fecha.Pista:powershellGet-ChildItem | Select-Object Name, Length, CreationTime | Sort-Object CreationTime

Cuando termines este bloque, cuéntame:

  • La versión de PowerShell que tienes
  • Si te han salido bien los ejercicios (y si alguno te ha dado guerra)

Y pasamos al siguiente bloque: PowerShell como lenguaje de scripting de verdad (funciones, scripts .ps1, parámetros, errores, etc.).

Entramos en el segundo bloque, y aquí es donde PowerShell empieza a ponerse realmente interesante: PowerShell como lenguaje de scripting real. Vamos a trabajar con:

  • Scripts .ps1
  • Parámetros
  • Funciones
  • Manejo de errores
  • Pipelines avanzados
  • Ejercicios prácticos que te convierten en power‑user

Todo con ejemplos que puedes ejecutar en tu VM ahora mismo.

🟦 BLOQUE 2 — PowerShell como lenguaje de scripting

🟩 1. Crear tu primer script .ps1

Vamos a crear un script que liste los procesos y los guarde en un archivo.

📌 Ejercicio 1

En tu Escritorio:

powershell

Set-Location $HOME\Desktop
New-Item -ItemType File -Name "listar-procesos.ps1"

Ahora edítalo con:

powershell

notepad listar-procesos.ps1

Pega dentro:

powershell

# Script: listar-procesos.ps1
# Lista procesos y los guarda en un archivo

$procesos = Get-Process
$procesos | Out-File "procesos.txt"

Write-Output "Procesos guardados en procesos.txt"

Guarda y ejecuta:

powershell

.\listar-procesos.ps1

Resultado esperado: aparece un archivo procesos.txt con la lista de procesos.

🟩 2. Scripts con parámetros (como funciones en Bash)

Vamos a crear un script que reciba un nombre de proceso y lo mate.

📌 Ejercicio 2

Crea:

powershell

New-Item -ItemType File -Name "matar.ps1"
notepad matar.ps1

Pega:

powershell

param(
    [string]$Nombre
)

if (-not $Nombre) {
    Write-Output "Debes indicar un nombre de proceso."
    exit
}

$proceso = Get-Process -Name $Nombre -ErrorAction SilentlyContinue

if ($proceso) {
    Stop-Process -Name $Nombre
    Write-Output "Proceso '$Nombre' detenido."
} else {
    Write-Output "No existe un proceso llamado '$Nombre'."
}

Ejemplo de uso:

powershell

.\matar.ps1 -Nombre notepad

🟩 3. Funciones dentro de PowerShell

Vamos a crear una función que busque archivos por extensión.

📌 Ejercicio 3

En PowerShell:

powershell

function Buscar-Extension {
    param(
        [string]$Extension
    )

    Get-ChildItem -Recurse -Filter "*.$Extension" | Select-Object FullName, Length
}

Ejemplo:

powershell

Buscar-Extension -Extension txt

🟩 4. Manejo de errores (try/catch)

Windows falla más que Linux, así que esto es vital.

📌 Ejercicio 4

Crea un script:

powershell

New-Item -ItemType File -Name "errores.ps1"
notepad errores.ps1

Pega:

powershell

try {
    Get-Process -Name "proceso_que_no_existe" -ErrorAction Stop
}
catch {
    Write-Output "Error detectado: $($_.Exception.Message)"
}

Ejecuta:

powershell

.\errores.ps1

🟩 5. Pipelines avanzados (objetos, no texto)

Vamos a filtrar procesos por memoria y ordenarlos.

📌 Ejercicio 5

powershell

Get-Process |
    Where-Object { $_.WorkingSet -gt 100MB } |
    Sort-Object WorkingSet -Descending |
    Select-Object ProcessName, WorkingSet -First 10

Esto te da los 10 procesos que más RAM consumen.

🟩 6. Crear un módulo (tu propia librería)

Vamos a crear tu primer módulo de PowerShell.

📌 Ejercicio 6

  1. Crea una carpeta de módulo:

powershell

New-Item -ItemType Directory -Path "$HOME\Documents\PowerShell\Modules\DavidTools"
  1. Crea el archivo del módulo:

powershell

notepad "$HOME\Documents\PowerShell\Modules\DavidTools\DavidTools.psm1"
  1. Pega dentro:

powershell

function Saludar {
    param([string]$Nombre)
    "Hola, $Nombre. Bienvenido a PowerShell."
}

function Contar-Archivos {
    param([string]$Ruta)
    (Get-ChildItem -Path $Ruta).Count
}
  1. Importa tu módulo:

powershell

Import-Module DavidTools
  1. Pruébalo:

powershell

Saludar -Nombre David
Contar-Archivos -Ruta C:\Windows

🟦 Mini‑reto del bloque 2

Crea un script llamado analizar.ps1 que:

  1. Reciba una extensión como parámetro
  2. Busque todos los archivos con esa extensión
  3. Muestre: nombre, tamaño y fecha
  4. Los ordene por tamaño
  5. Guarde el resultado en un archivo resultado.txt

Ejemplo de uso:

powershell

.\analizar.ps1 -Extension log

🟢 Cuando completes este bloque, pasamos al siguiente:

PowerShell avanzado de verdad: automatización, scripts complejos, logs, tareas programadas, y control remoto.

Dime cuando lo tengas listo y seguimos.

Entramos en el BLOQUE 3, donde PowerShell deja de ser “una consola” y se convierte en una herramienta de automatización profesional. Aquí aprenderás a:

  • Crear scripts complejos
  • Usar funciones avanzadas
  • Manejar errores como un pro
  • Registrar logs
  • Automatizar tareas
  • Ejecutar scripts remotos
  • Crear herramientas reutilizables

Todo con ejercicios prácticos que puedes hacer ahora mismo en tu VM.

🟦 BLOQUE 3 — PowerShell avanzado y automatización real

Vamos a ir paso a paso, con ejercicios que construyen uno sobre otro.

🟩 1. Estructura profesional de un script

Un script serio en PowerShell suele tener:

  1. Cabecera
  2. Parámetros
  3. Validaciones
  4. Funciones internas
  5. Lógica principal
  6. Logs
  7. Manejo de errores

Vamos a crear uno.

📌 Ejercicio 1 — Crear un script con estructura profesional

En tu Escritorio:

powershell

notepad $HOME\Desktop\plantilla.ps1

Pega esto:

powershell

<#
.SYNOPSIS
    Plantilla profesional de script PowerShell

.DESCRIPTION
    Ejemplo de estructura avanzada para scripts reutilizables.

.PARAMETER Nombre
    Nombre de usuario para saludar.

.EXAMPLE
    .\plantilla.ps1 -Nombre David
#>

param(
    [Parameter(Mandatory=$true)]
    [string]$Nombre
)

function Escribir-Log {
    param([string]$Mensaje)

    $fecha = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    "$fecha - $Mensaje" | Out-File -FilePath "script.log" -Append
}

try {
    Escribir-Log "Inicio del script"
    Write-Output "Hola, $Nombre"
    Escribir-Log "Saludo enviado a $Nombre"
}
catch {
    Escribir-Log "ERROR: $($_.Exception.Message)"
}
finally {
    Escribir-Log "Fin del script"
}

Ejecuta:

powershell

.\plantilla.ps1 -Nombre David

Resultado esperado:

  • Aparece un archivo script.log con entradas de log.
  • El script imprime “Hola, David”.

🟩 2. Funciones avanzadas (con pipeline)

Vamos a crear una función que acepte entrada por pipeline, como los cmdlets nativos.

📌 Ejercicio 2 — Función que recibe objetos por pipeline

powershell

function Mostrar-Info {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline=$true)]
        $Entrada
    )

    process {
        Write-Output "Objeto recibido: $($_.Name)"
    }
}

Prueba:

powershell

Get-ChildItem | Mostrar-Info

Resultado esperado: Imprime “Objeto recibido: nombre_del_archivo” para cada archivo.

🟩 3. Validación de parámetros (como en lenguajes tipados)

📌 Ejercicio 3 — Parámetros con validación

powershell

function Crear-Carpeta {
    param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Nombre,

        [ValidateSet("Roja","Verde","Azul")]
        [string]$Color
    )

    New-Item -ItemType Directory -Name $Nombre
    Write-Output "Carpeta '$Nombre' creada con color $Color"
}

Prueba:

powershell

Crear-Carpeta -Nombre Test -Color Roja

Si pones un color no permitido, PowerShell te lo impedirá.

🟩 4. Manejo avanzado de errores

📌 Ejercicio 4 — Capturar errores específicos

powershell

try {
    Get-Process -Name "noexiste" -ErrorAction Stop
}
catch [System.Management.Automation.ItemNotFoundException] {
    Write-Output "Ese proceso no existe."
}
catch {
    Write-Output "Error inesperado: $($_.Exception.Message)"
}

🟩 5. Logs profesionales (rotación incluida)

Vamos a crear un log que se “rota” cuando supera cierto tamaño.

📌 Ejercicio 5 — Log con rotación

powershell

function Escribir-Log {
    param([string]$Mensaje)

    $log = "actividad.log"

    if (Test-Path $log -and (Get-Item $log).Length -gt 1MB) {
        Rename-Item $log "actividad_$(Get-Date -Format yyyyMMddHHmmss).log"
    }

    "$((Get-Date)) - $Mensaje" | Out-File $log -Append
}

Prueba:

powershell

1..5000 | ForEach-Object { Escribir-Log "Entrada $_" }

🟩 6. Automatización: ejecutar scripts desde el Programador de Tareas

Vamos a crear una tarea que ejecute un script cada minuto.

📌 Ejercicio 6 — Crear tarea programada

  1. Crea un script:

powershell

"$(Get-Date) - Tarea ejecutada" | Out-File C:\tarea.txt -Append

Guárdalo como C:\tarea.ps1.

  1. Crea la tarea:

powershell

schtasks /create /tn "MiTarea" /tr "powershell.exe -File C:\tarea.ps1" /sc minute
  1. Comprueba:

powershell

schtasks /query /tn "MiTarea"

🟩 7. Automatización remota (SSH + PowerShell)

Ya que tu Windows tiene SSH, puedes ejecutar comandos desde tu Mac.

📌 Ejercicio 7 — Ejecutar PowerShell remoto desde macOS

En tu Mac:

bash

ssh david@IP-de-tu-windows "powershell.exe -Command Get-Process"

O ejecutar un script remoto:

bash

ssh david@IP-de-tu-windows "powershell.exe -File C:\tarea.ps1"

🟦 Mini‑reto del bloque 3

Crea un script llamado monitor.ps1 que:

  1. Reciba un nombre de proceso
  2. Compruebe cada 5 segundos si está vivo
  3. Si muere, lo reinicie
  4. Registre todo en un log
  5. Nunca se cierre (bucle infinito controlado)

Pista:

powershell

while ($true) {
    ...
    Start-Sleep 5
}

🟢 Cuando completes este bloque, pasamos al siguiente:

Administración de Windows como servidor: servicios, firewall, usuarios, permisos, logs, políticas, y seguridad.

BLOQUE 4 — Administración de Windows como servidor

🟩 1. Servicios (el equivalente a systemd en Linux)

Windows usa el Service Control Manager (SCM). Todo lo que en Linux sería un “daemon”, aquí es un “servicio”.

🔧 Comandos esenciales

AcciónPowerShell
Ver todos los serviciosGet-Service
Ver un servicio concretoGet-Service -Name sshd
IniciarStart-Service sshd
DetenerStop-Service sshd
ReiniciarRestart-Service sshd
Cambiar inicio automáticoSet-Service sshd -StartupType Automatic

📌 Ejercicio 1 — Controlar el servicio SSH

  1. Comprueba su estado:

powershell

Get-Service sshd
  1. Si está detenido, arráncalo:

powershell

Start-Service sshd
  1. Ponlo en inicio automático:

powershell

Set-Service sshd -StartupType Automatic
  1. Reinícialo:

powershell

Restart-Service sshd

Objetivo: que tu Windows sea accesible por SSH siempre.

🟩 2. Firewall de Windows (muy potente y muy estricto)

Windows Firewall es serio: si no abres un puerto, no pasa nada.

🔧 Comandos esenciales

AcciónPowerShell
Ver reglasGet-NetFirewallRule
Ver reglas por puertoGet-NetFirewallPortFilter
Crear reglaNew-NetFirewallRule
Eliminar reglaRemove-NetFirewallRule

📌 Ejercicio 2 — Abrir un puerto nuevo

Vamos a abrir el puerto 8080:

powershell

New-NetFirewallRule -DisplayName "Puerto 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow

Comprueba que existe:

powershell

Get-NetFirewallRule -DisplayName "Puerto 8080"

🟩 3. Usuarios y grupos (equivalente a /etc/passwd y /etc/group)

Windows tiene:

  • Usuarios locales
  • Grupos locales
  • Usuarios de dominio (cuando hay Active Directory)

🔧 Comandos esenciales

AcciónPowerShell
Ver usuariosGet-LocalUser
Crear usuarioNew-LocalUser
Ver gruposGet-LocalGroup
Añadir usuario a grupoAdd-LocalGroupMember

📌 Ejercicio 3 — Crear un usuario administrador

  1. Crear usuario:

powershell

$pass = Read-Host -AsSecureString
New-LocalUser -Name "pruebas" -Password $pass
  1. Añadirlo al grupo Administrators:

powershell

Add-LocalGroupMember -Group Administrators -Member pruebas
  1. Comprueba:

powershell

Get-LocalGroupMember Administrators

🟩 4. Permisos (ACLs) — más complejos que POSIX, pero más flexibles

Windows usa Access Control Lists.

🔧 Comandos esenciales

AcciónPowerShell
Ver permisosGet-Acl
Cambiar permisosSet-Acl

📌 Ejercicio 4 — Dar permisos completos a un usuario

  1. Crea una carpeta:

powershell

New-Item -ItemType Directory -Path C:\pruebas
  1. Carga su ACL:

powershell

$acl = Get-Acl C:\pruebas
  1. Crea una regla:

powershell

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("pruebas","FullControl","Allow")
  1. Añádela:

powershell

$acl.AddAccessRule($rule)
Set-Acl C:\pruebas $acl

🟩 5. Logs del sistema (equivalente a /var/log)

Windows usa el Visor de Eventos.

🔧 Abrirlo:

Código

eventvwr.msc

🔧 Desde PowerShell:

powershell

Get-EventLog -LogName System -Newest 20

📌 Ejercicio 5 — Ver errores recientes

powershell

Get-EventLog -LogName System -EntryType Error -Newest 10

🟩 6. Políticas de seguridad (el equivalente a /etc/security + PAM)

Windows tiene:

  • Local Security Policy
  • Group Policy (GPO)

🔧 Abrir políticas locales:

Código

secpol.msc

🔧 Abrir editor de políticas:

Código

gpedit.msc

Aquí puedes controlar:

  • contraseñas
  • bloqueo de cuentas
  • permisos de usuario
  • scripts de inicio
  • firewall
  • auditoría

📌 Ejercicio 6 — Ver políticas de contraseña

En PowerShell:

powershell

net accounts

🟦 MINI‑RETO DEL BLOQUE

Crea un entorno de servidor básico:

  1. Crea un usuario llamado servidor
  2. Dale permisos completos sobre C:\servidor
  3. Abre el puerto 9000 en el firewall
  4. Crea un log con los últimos 20 errores del sistema
  5. Pon el servicio SSH en inicio automático

Si quieres, puedo revisar tus comandos cuando los tengas.

🟢 Cuando termines este bloque, pasamos al siguiente:

Seguridad avanzada: auditoría, hardening, políticas, control remoto, y buenas prácticas de servidor.

Usuarios de dominios: Active Directory

En windows en cuanto a usuarios y grupos que es el qequivalete al /etc/passwd y /etc/grtoup, existen usuarios locales, grupos locales y usuarios de dominio, y a ellos se les da permisos ACLs. Me puedes explicar la parte de Usuarios de Dominio (Active Directory). En que consiste Active Directory. Y otros sistemas similares que he escuchado. 

Muy buena pregunta, porque aquí entramos en la gestión de identidades en redes corporativas, que es una parte central de los sistemas Windows. Voy a conectarlo con lo que ya conoces de Unix/Linux para que se entienda mejor.


1. En Linux: /etc/passwd y /etc/group

En sistemas tipo Unix como Linux, los usuarios y grupos se guardan tradicionalmente en archivos de texto.

Usuarios

Archivo:

/etc/passwd

Ejemplo:

david:x:1000:1000:David Sanchez:/home/david:/bin/bash

Campos:

camposignificado
usuarionombre
UIDidentificador
GIDgrupo
homedirectorio
shellintérprete

Grupos

Archivo:

/etc/group

Ejemplo:

admins:x:1001:david,maria

Todo esto es local a ese ordenador.


2. El problema en redes grandes

Imagina una empresa con:

5000 empleados
300 servidores
2000 PCs

Si cada máquina tuviera usuarios locales sería un caos.

Habría que crear el usuario en cada equipo.


3. La solución: directorios centralizados

Aquí entran sistemas como Active Directory.

La idea:

un servidor central
→ guarda todos los usuarios
→ todos los equipos lo consultan

Así un usuario puede iniciar sesión en cualquier ordenador de la empresa.


4. Qué es Active Directory

Active Directory es un sistema de gestión centralizada de identidades y recursos creado por Microsoft.

Permite administrar:

  • usuarios
  • grupos
  • ordenadores
  • políticas de seguridad
  • recursos de red.

5. Concepto clave: el dominio

En Active Directory todo gira alrededor de un dominio.

Ejemplo:

empresa.local

Ese dominio tiene:

  • usuarios
  • equipos
  • servidores.

6. Domain Controller

El servidor que guarda la base de datos se llama:

Domain Controller

Este servidor contiene el directorio completo.

Los PCs de la red se unen al dominio.


7. La base de datos de AD

Active Directory guarda los objetos en una base de datos llamada:

NTDS.dit

Contiene:

  • usuarios
  • grupos
  • permisos
  • equipos.

8. Objetos de Active Directory

Todo en AD es un objeto.

Ejemplos:

objetoejemplo
usuariojuan
grupoadministradores
equipoPC-VENTAS-01
impresoraHP-LASER

9. Estructura jerárquica

AD organiza objetos en una jerarquía.

Ejemplo:

empresa.local

├── Usuarios
│ ├── Juan
│ └── Ana

├── Equipos
│ ├── PC01
│ └── PC02

└── Servidores

Esto se organiza mediante Unidades Organizativas (OU).


10. Inicio de sesión en dominio

Cuando un usuario inicia sesión:

PC

envía credenciales

Domain Controller

verifica contraseña

devuelve token de seguridad

Ese token contiene:

  • SID del usuario
  • grupos
  • privilegios.

11. Protocolos que usa Active Directory

AD combina varios estándares.

protocolofunción
LDAPacceder al directorio
Kerberosautenticación
DNSlocalizar servidores

12. Grupos de dominio

Igual que en Linux hay grupos, en AD existen:

  • grupos globales
  • grupos locales
  • grupos universales.

Se usan para asignar permisos.

Ejemplo:

Grupo: Ventas

Permiso a carpeta \\servidor\ventas

13. ACLs con usuarios de dominio

Cuando asignas permisos a una carpeta NTFS puedes poner:

DOMINIO\Juan
DOMINIO\Ventas

Windows usa el SID del dominio para identificarlo.


14. Políticas de grupo (GPO)

Una característica muy potente de AD son las:

Group Policy

Permiten configurar miles de PCs automáticamente.

Ejemplos:

  • fondo de pantalla corporativo
  • instalar software
  • bloquear USB
  • políticas de contraseña.

15. Sistemas similares a Active Directory

Existen alternativas en el mundo Unix/Linux.


LDAP

El estándar base es LDAP.

Muchos sistemas usan LDAP para gestionar usuarios.


OpenLDAP

Implementación libre de LDAP:

OpenLDAP

Muy usada en servidores Linux.


FreeIPA

Sistema completo de identidad para Linux:

FreeIPA

Integra:

  • LDAP
  • Kerberos
  • DNS.

Samba Active Directory

Los servidores Linux pueden actuar como AD mediante:

Samba

Esto permite crear controladores de dominio compatibles con Windows.


16. Equivalencia conceptual

LinuxWindows
/etc/passwdusuarios locales
/etc/groupgrupos
LDAPActive Directory
Kerberosautenticación de dominio

17. Idea clave

Active Directory no es solo usuarios.

Es realmente:

base de datos
+
sistema de autenticación
+
gestión de políticas
+
directorio de recursos

Es el centro de identidad de toda la red.


💡 Si quieres, puedo explicarte también algo muy interesante que suele confundir mucho:

  • la diferencia entre autenticación y autorización
  • cómo funciona exactamente Kerberos cuando inicias sesión en un dominio

Te aclaro primero una cosa importante: Citrix no es exactamente un sistema de identidades como Active Directory.
Citrix se apoya en Active Directory para los usuarios, pero su función es otra capa distinta.

Voy a separarlo en tres partes claras:

1️⃣ qué es Citrix
2️⃣ otros sistemas parecidos (virtualización y acceso remoto)
3️⃣ cómo entra Kerberos en todo esto.


1. Qué es Citrix realmente

Citrix es una plataforma para ejecutar aplicaciones o escritorios de forma remota.

La idea es esta:

usuario

se conecta a servidor

las aplicaciones se ejecutan en el servidor

solo se envía la pantalla al usuario

Es decir:

teclado / ratón → servidor
pantalla ← servidor

El ordenador del usuario no ejecuta realmente el programa.


2. Para qué se usa Citrix

Se usa mucho en empresas grandes para:

  • aplicaciones corporativas
  • hospitales
  • banca
  • administración pública.

Ejemplo típico:

usuario desde casa

abre Citrix

ve el escritorio de la empresa

ejecuta SAP o software corporativo

Todo corre en servidores del datacenter.


3. Componentes principales de Citrix

Un sistema Citrix suele tener:

Citrix Gateway

Entrada desde Internet.

Delivery Controller

Decide qué servidor ejecutará la sesión.

VDA (Virtual Desktop Agent)

Servidor donde corre el escritorio o aplicación.

Citrix Workspace

Cliente del usuario.


4. Diferencia con Active Directory

sistemafunción
Active Directoryidentidades
Citrixacceso remoto a aplicaciones

Citrix normalmente usa Active Directory para autenticar usuarios.


5. Sistemas parecidos a Citrix

Hay varias tecnologías similares.


Remote Desktop Services

El sistema de Microsoft:

Remote Desktop Services

Permite ejecutar escritorios remotos en Windows Server.

Es como Citrix pero integrado en Windows.


VMware Horizon

Plataforma de virtualización de escritorios:

VMware Horizon

Muy usada en empresas.


VDI (Virtual Desktop Infrastructure)

Es el concepto general:

PCs virtuales en servidores

usuarios acceden remotamente

6. Cómo entra Kerberos en todo esto

Ahora llegamos a algo importante.

Cuando inicias sesión en un dominio Windows, se usa Kerberos.

Kerberos es un sistema de autenticación segura en red.

Fue desarrollado originalmente en el MIT.


7. El problema que resuelve Kerberos

Imagina este escenario:

usuario

accede a servidor archivos

accede a servidor correo

accede a servidor aplicaciones

Sin Kerberos tendrías que:

introducir contraseña en cada servidor

Eso es inseguro.


8. La idea de Kerberos

Kerberos usa tickets de autenticación.

Proceso simplificado:

login usuario

servidor autenticación

entrega ticket

usuario usa ticket para acceder a servicios

El usuario no envía la contraseña constantemente.


9. Componentes de Kerberos

Hay tres actores principales:

componentefunción
clienteusuario
servidorservicio
KDCservidor de autenticación

KDC significa:

Key Distribution Center

En Active Directory el Domain Controller actúa como KDC.


10. Flujo simplificado de Kerberos

1️⃣ usuario inicia sesión

2️⃣ el sistema pide un ticket al KDC

3️⃣ el KDC devuelve un Ticket Granting Ticket (TGT)

4️⃣ con ese ticket el usuario puede pedir acceso a servicios.


Ejemplo

usuario

login dominio

recibe TGT

accede a servidor archivos

recibe ticket servicio

Todo ocurre automáticamente.


11. Por qué Kerberos es seguro

Ventajas:

✔ no envía contraseñas constantemente
✔ usa criptografía
✔ evita ataques de repetición.

Por eso lo usan:

  • Windows
  • Linux
  • macOS
  • sistemas empresariales.

12. Ejemplo real en una empresa

usuario inicia sesión en PC

Active Directory autentica con Kerberos

usuario abre Citrix

Citrix usa el mismo ticket Kerberos

accede a aplicaciones

Esto se llama:

Single Sign-On (SSO)

13. Otros sistemas de identidad modernos

Además de Active Directory existen sistemas actuales como:

Azure AD

Microsoft Entra ID

Directorio de identidades en la nube.


Okta

Okta

Plataforma de identidad para aplicaciones web.


Keycloak

Keycloak

Sistema open source de autenticación.


14. Resumen conceptual

Hay varias capas:

identidad

Active Directory

autenticación

Kerberos

acceso aplicaciones

Citrix / RDS / VDI

💡 Si quieres, puedo explicarte algo muy interesante que casi nadie explica bien pero ayuda mucho a entender redes empresariales:

la diferencia entre:

  • autenticación
  • autorización
  • federación de identidad
  • Single Sign-On

y cómo se conectan Active Directory, Kerberos, SAML y OAuth. Es básicamente la arquitectura de identidad de Internet moderno.

Te voy a explicar la arquitectura moderna de identidad, porque conecta todo lo que hemos visto: Active Directory, Kerberos, Citrix, Azure AD, SSO, etc.
Es básicamente cómo se controla quién puede acceder a qué en redes y en Internet.

Primero aclaramos 4 conceptos fundamentales que muchas veces se confunden.


1. Autenticación vs Autorización

Autenticación

Responder a la pregunta:

¿Quién eres?

Ejemplo:

  • usuario introduce contraseña
  • usa tarjeta inteligente
  • usa biometría.

Protocolos típicos:

  • Kerberos
  • LDAP

Autorización

Responder a la pregunta:

¿qué puedes hacer?

Ejemplo:

usuariopermiso
Juanleer carpeta
Anamodificar carpeta

Esto se implementa con:

  • ACL
  • roles
  • grupos.

2. Identidad digital

En redes corporativas cada persona tiene una identidad digital.

Ejemplo:

usuario: juan
correo: juan@empresa.com
grupos: ventas

Estas identidades se guardan en un directorio como:

  • Active Directory
  • OpenLDAP

3. Single Sign-On (SSO)

SSO significa:

iniciar sesión una vez

acceder a muchos sistemas

Ejemplo:

login PC empresa

correo

intranet

Citrix

aplicaciones corporativas

Todo sin volver a introducir contraseña.

Esto se logra con sistemas de tickets o tokens.

Ejemplo: Kerberos.


4. Federación de identidad

Aquí entramos en algo más moderno.

Federación significa:

un sistema confía en la identidad de otro

Ejemplo típico:

entrar en una web con Google

Tu cuenta Google autentica al usuario.

Protocolos usados:

  • SAML
  • OAuth 2.0
  • OpenID Connect

5. Cómo funciona la identidad en empresas modernas

La arquitectura suele ser así:

usuarios

directorio de identidad

autenticación

tokens

acceso a aplicaciones

Ejemplo real:

usuario

Active Directory

Kerberos

SSO

Citrix / aplicaciones

6. Qué es Azure AD (actualmente Entra ID)

Lo que antes se llamaba Azure Active Directory ahora se llama Microsoft Entra ID.

Es básicamente Active Directory pero en la nube.

Pero hay una diferencia importante.


7. Diferencia entre Active Directory y Azure AD

característicaActive DirectoryAzure AD
entornored localnube
protocolosKerberos, LDAPOAuth, SAML
usoPCs y servidoresaplicaciones web
ubicacióndatacenter empresacloud Microsoft

Active Directory

Gestiona:

  • PCs del dominio
  • usuarios de red
  • servidores.

Azure AD

Gestiona:

  • identidades cloud
  • Microsoft 365
  • aplicaciones SaaS.

8. Ejemplo práctico Azure AD

Un usuario inicia sesión en:

  • Microsoft 365

Proceso:

usuario

login Microsoft

Azure AD autentica

recibe token

accede a Outlook / Teams

9. Tokens modernos

En sistemas web no se usan tickets Kerberos.

Se usan tokens.

Ejemplo:

JWT

(JSON Web Token)

Contiene:

usuario
permisos
expiración
firma criptográfica

10. Arquitectura típica moderna

En muchas empresas hoy existe esto:

usuarios

Active Directory

sincronización

Azure AD

aplicaciones cloud

La sincronización se hace con herramientas de Microsoft.


11. Ejemplo real en una empresa grande

usuario inicia sesión PC

Active Directory autentica

Kerberos

SSO

abre navegador

Azure AD

acceso a Microsoft 365

acceso a Salesforce

acceso a aplicaciones SaaS

12. Otros sistemas similares a Azure AD

Varias empresas ofrecen sistemas de identidad.

Okta

Okta

Muy popular en SaaS.


Keycloak

Keycloak

Open source.


Ping Identity

Ping Identity

Usado en grandes empresas.


13. Concepto clave: Identity Provider

Todos estos sistemas actúan como:

Identity Provider (IdP)

Es decir:

servicio que confirma tu identidad

Ejemplos:

  • Azure AD
  • Okta
  • Google.

14. La arquitectura completa de identidad moderna

usuarios

Identity Provider

autenticación

token

aplicaciones

Protocolos más usados hoy:

  • SAML
  • OAuth
  • OpenID Connect.

💡 Si quieres, puedo explicarte algo muy interesante que conecta todo lo que hemos visto (sistemas operativos + redes + identidad):

cómo funciona realmente el inicio de sesión en una empresa desde que enciendes el PC hasta que puedes abrir aplicaciones en la nube.

Ese flujo mezcla:

  • DNS
  • Active Directory
  • Kerberos
  • Azure AD
  • tokens
  • SSO

y es una de las arquitecturas más elegantes de la informática moderna.

Vamos a cerrar el “mapa mental” completo de identidad y acceso en sistemas modernos. Esto conecta Active Directory, Kerberos, SAML, OAuth, OpenID, Azure AD, Citrix, etc..
Si entiendes esto, prácticamente entiendes cómo funciona la autenticación en casi todo Internet y en redes empresariales. 🔐


1. Primero: tres conceptos básicos

Antes de entrar en protocolos, hay que distinguir tres cosas distintas.

1️⃣ Autenticación (Authentication)

Demostrar quién eres.

Ejemplos:

  • Usuario + contraseña
  • certificado
  • token
  • huella

Ejemplo real:

usuario: david
password: ****

2️⃣ Autorización (Authorization)

Determinar qué puedes hacer después de autenticarte.

Ejemplo:

UsuarioPermiso
davidleer carpeta
adminleer + escribir

Esto suele usarse con ACLs.


3️⃣ Identidad (Identity)

Sistema central que guarda:

  • usuarios
  • grupos
  • permisos
  • políticas

Ejemplo:

  • Active Directory
  • LDAP
  • Azure AD

2. Qué es Kerberos

Kerberos

Es el protocolo de autenticación de redes usado por Windows en dominios.

La idea es no enviar la contraseña cada vez.

En vez de eso se usan tickets temporales.


Funcionamiento simplificado

Supongamos:

  • usuario: David
  • servidor: FileServer
  • controlador de dominio: AD

Paso 1 — login

David inicia sesión en su PC.

El PC pide autenticación al controlador de dominio.

El controlador responde con un:

TGT = Ticket Granting Ticket

Paso 2 — acceso a recursos

Cuando David quiere acceder a un servidor:

\\fileserver\documentos

El PC pide al controlador:

ticket para fileserver

El controlador entrega un service ticket.


Paso 3 — acceso

El servidor recibe el ticket.

Lo valida.

Y permite el acceso.


Ventajas

✔ no se envían contraseñas por la red
✔ autenticación rápida
✔ tickets temporales

Por eso es usado por:

  • Windows domain
  • Linux enterprise
  • HPC clusters

3. Qué es SAML

SAML

SAML se usa mucho en login corporativo en webs.

Ejemplo típico:

Login with company account

Ejemplo real

Intentas entrar a:

Salesforce

Pero la empresa usa login corporativo.

Proceso:

1️⃣ vas a Salesforce
2️⃣ te redirige a login empresa
3️⃣ empresa te autentica
4️⃣ envía una SAML assertion


Resultado

Salesforce recibe algo como:

Usuario: david@empresa.com
Autenticado: SI

Y te deja entrar.


Usos comunes

  • Google Workspace
  • Office 365
  • Slack
  • Atlassian
  • Salesforce

4. Qué es OAuth

OAuth 2.0

OAuth sirve para dar acceso a una aplicación sin compartir contraseña.


Ejemplo clásico

“Login with Google”.


Proceso:

1️⃣ app pide acceso

quiero acceso a tu email

2️⃣ Google muestra consentimiento

¿permitir acceso?

3️⃣ si aceptas → Google entrega access token


El token permite

leer perfil
leer email

pero sin conocer tu contraseña.


5. Qué es OpenID Connect

OpenID Connect

OpenID Connect es OAuth + identidad.

Es decir:

OAuth = autorización
OpenID = autenticación


Ejemplo:

Login with Google
Login with Apple
Login with Microsoft

Todo esto usa OpenID Connect.


6. Qué es Azure AD

Microsoft Entra ID

Antes se llamaba Azure AD.

Ahora se llama Microsoft Entra ID.

Es el Active Directory en la nube.


Qué gestiona

  • usuarios
  • grupos
  • dispositivos
  • aplicaciones
  • autenticación

Ejemplo

Empresa usa:

  • Windows
  • Office365
  • Teams
  • SharePoint

Todos usan Entra ID.


Permite

  • SSO (Single Sign-On)
  • MFA
  • acceso condicional

7. Qué es SSO

Single Sign-On

SSO = una sola autenticación para muchas apps.

Ejemplo:

Login una vez y accedes a:

  • correo
  • Teams
  • SharePoint
  • Slack

sin volver a poner contraseña.


8. Qué es Citrix

Citrix Systems

Citrix permite usar aplicaciones o escritorios remotos.


Ejemplo:

Trabajador abre:

Citrix Workspace

y ve:

  • escritorio Windows remoto
  • apps corporativas

Cómo funciona

Las apps corren en:

servidores centrales

El usuario solo ve la pantalla remota.


Ventajas:

✔ seguridad
✔ datos no salen de la empresa
✔ funciona en cualquier dispositivo


9. Cómo se conectan todas estas tecnologías

En una empresa moderna suele haber esto:

Usuario

Entra ID / Active Directory

Kerberos / OAuth / SAML

Aplicaciones

Ejemplo real:

Usuario → login Windows

Active Directory

SSO

Teams
SharePoint
Salesforce
Citrix

10. Ejemplo real de flujo moderno

Empleado abre portátil.

1️⃣ login Windows
2️⃣ autenticación Kerberos
3️⃣ obtiene ticket
4️⃣ accede a recursos internos

Luego abre navegador.

5️⃣ accede a Teams
6️⃣ SSO con Entra ID
7️⃣ OAuth token
8️⃣ acceso permitido

Todo sin volver a introducir contraseña.


11. Otros sistemas similares a Active Directory

Alternativas comunes:

Linux / open source

  • OpenLDAP
  • FreeIPA
  • 389 Directory Server

Empresas

  • Okta
  • Ping Identity

12. El mapa final (muy importante)

Arquitectura típica moderna:

                Internet

Identity Provider
(Entra / Okta / AD)

┌───────────┼───────────┐
│ │ │
SAML OAuth OpenID
│ │ │
Web Apps APIs Login Web

💡 Si quieres, en el siguiente nivel puedo explicarte algo MUY interesante que casi nadie entiende bien:

Cómo funciona realmente un login en Windows dentro de un dominio paso a paso

Veremos:

  • LSASS
  • NTLM
  • Kerberos tickets
  • Domain Controller
  • hash de contraseñas
  • pass-the-hash

Es la parte más profunda del sistema de seguridad de Windows. Y también donde ocurren la mayoría de ataques. 🔐

Vamos a entrar en el nivel más profundo del login de Windows en un dominio, porque aquí aparecen muchos componentes internos que casi nadie explica juntos: LSASS, hashes de contraseña, NTLM, Kerberos, Domain Controller, etc.


1. Qué ocurre realmente cuando haces login en Windows

Supongamos este escenario:

  • usuario: DAVID
  • dominio: EMPRESA.LOCAL
  • PC unido al dominio
  • hay un controlador de dominio

Ese controlador suele ejecutar Active Directory.


2. Componentes internos del login

Dentro de Windows participan varias piezas del sistema:

ComponenteFunción
Winlogonpantalla de login
LSASSautenticación
SAMbase de datos de usuarios locales
Kerberosautenticación de dominio
NTLMautenticación antigua

3. Winlogon: la pantalla de login

Cuando ves la pantalla:

Ctrl + Alt + Del

entra en acción el proceso:

winlogon.exe

Este proceso:

  • recibe usuario
  • recibe contraseña
  • se lo pasa al sistema de autenticación.

4. LSASS (el corazón de la seguridad)

El proceso más importante es:

lsass.exe

LSASS significa:

Local Security Authority Subsystem Service

Su trabajo es:

  • verificar contraseñas
  • generar tokens de acceso
  • gestionar autenticación

Por qué es tan importante

Muchos ataques informáticos intentan robar credenciales desde LSASS.

Herramientas famosas como:

  • Mimikatz

intentan leer memoria de LSASS para robar:

  • hashes
  • tickets Kerberos

5. Qué pasa con tu contraseña

Cuando escribes la contraseña:

MiPassword123

Windows NO la guarda en texto.

La convierte en un hash.

Ejemplo:

hash = 2a7f3c9f8e4...

Ese hash es lo que se compara con la base de datos.


6. Base de datos de usuarios

Si el usuario es local, Windows consulta:

SAM database

SAM significa:

Security Account Manager

Archivo interno del sistema.

Contiene:

  • usuarios
  • hashes de contraseñas

7. Si el usuario es de dominio

En vez de SAM, Windows contacta con el:

Domain Controller

Ese servidor ejecuta:

Active Directory


8. Dos métodos de autenticación

Windows puede usar:

1️⃣ NTLM

NTLM

Protocolo antiguo.

Proceso simplificado:

cliente → servidor
challenge
response

El servidor envía un reto.

El cliente responde usando el hash.


Problema:

NTLM es más vulnerable.

Por eso Microsoft intenta eliminarlo.


2️⃣ Kerberos (el moderno)

Kerberos

Sistema basado en tickets.

Más seguro.

Más rápido.


9. Flujo completo de Kerberos

Cuando haces login:

Paso 1

PC → Domain Controller

Authentication request

Paso 2

El controlador devuelve:

TGT

Ticket Granting Ticket.


Paso 3

Cuando accedes a un recurso:

\\server\files

El PC usa el TGT para pedir otro ticket.


Paso 4

Obtiene:

Service Ticket

Paso 5

El servidor acepta el ticket.

Acceso concedido.


10. El Access Token (muy importante)

Cuando te autenticas, Windows crea algo llamado:

Access Token

Este token contiene:

  • tu SID
  • tus grupos
  • privilegios

SID

Security Identifier

Es un identificador único del usuario.

Ejemplo:

S-1-5-21-3452345234-23452345-1001

11. Qué hace Windows con ese token

Cada vez que accedes a algo:

  • archivo
  • carpeta
  • programa

Windows compara:

token del usuario
VS
ACL del objeto

Si coincide → acceso permitido.


12. Ataques famosos en dominios Windows

Muchos ataques se basan en robar:

hashes

ataque:

Pass-the-hash

El atacante usa el hash directamente.


tickets

ataque:

Pass-the-ticket

Roba tickets Kerberos.


ataque famoso

Golden Ticket

Si alguien compromete el controlador de dominio puede crear tickets falsos para cualquier usuario.


13. Qué guarda Active Directory realmente

Dentro de Active Directory hay:

  • usuarios
  • grupos
  • ordenadores
  • políticas
  • certificados

Todo organizado en:

Domain
├─ Users
├─ Groups
├─ Computers
└─ Organizational Units

14. Group Policy

Group Policy

Permite aplicar configuraciones a todos los PCs.

Ejemplo:

  • bloquear USB
  • instalar software
  • configurar firewall
  • cambiar fondo de pantalla

15. Arquitectura típica de una empresa

Red empresarial:

           Domain Controller
(Active Directory)

┌────────┼────────┐
│ │ │
PC usuario Servidor Aplicaciones

Todo se autentica contra el dominio.


16. Qué pasa cuando el PC está fuera de la empresa

Si estás en casa:

Windows puede usar:

  • credenciales cacheadas
  • VPN
  • autenticación en la nube

Ejemplo:

Microsoft Entra ID


17. La evolución moderna

Arquitectura antigua:

Active Directory
+
Kerberos

Arquitectura moderna:

Entra ID
+
OAuth
+
OpenID Connect

18. El mapa completo de identidad moderna

Usuario

Login Windows

LSASS

Kerberos

Active Directory

SSO

Apps corporativas

Seguridad

Vamos a entrar en uno de los bloques más potentes y útiles de todo el curso: Seguridad avanzada en Windows como servidor, con ejercicios prácticos que puedes hacer ahora mismo en tu VM.

Este bloque te va a dar una visión que normalmente solo tienen administradores de sistemas profesionales.

Lo vamos a dividir en:

  1. Seguridad y permisos avanzados (ACLs, herencia, auditoría)
  2. Hardening del sistema
  3. Políticas de seguridad (Local Security Policy y GPO)
  4. Auditoría del sistema
  5. Control remoto seguro
  6. Buenas prácticas de servidor
  7. Ejercicios prácticos en cada sección

Vamos paso a paso.

🟦 1. Seguridad y permisos avanzados (ACLs, herencia, auditoría)

Windows no usa permisos POSIX. Usa ACLs (Access Control Lists), que son más complejas pero más flexibles.

🟩 Ver permisos de un archivo o carpeta

powershell

Get-Acl C:\carpeta

🟩 Añadir permisos avanzados

powershell

$acl = Get-Acl C:\carpeta
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("usuario","Modify","ContainerInherit,ObjectInherit","None","Allow")
$acl.AddAccessRule($rule)
Set-Acl C:\carpeta $acl

🟩 Quitar permisos

powershell

$acl.RemoveAccessRule($rule)
Set-Acl C:\carpeta $acl

🟩 Desactivar herencia (muy importante en servidores)

powershell

$acl = Get-Acl C:\carpeta
$acl.SetAccessRuleProtection($true,$false)
Set-Acl C:\carpeta $acl

Esto evita que permisos de carpetas superiores se propaguen.

📌 Ejercicio 1 — Control total sobre una carpeta sin herencia

  1. Crea C:\seguridad
  2. Desactiva herencia
  3. Quita todos los permisos
  4. Añade solo a tu usuario con FullControl

🟦 2. Hardening del sistema (reforzar Windows)

Aquí es donde Windows se convierte en un servidor serio.

🟩 Desactivar servicios innecesarios

Lista servicios:

powershell

Get-Service | Sort-Object Status

Servicios típicos que se pueden desactivar en un servidor aislado:

  • Xbox Services
  • Print Spooler (si no usas impresoras)
  • Remote Registry
  • Bluetooth Support Service

Ejemplo:

powershell

Stop-Service -Name Spooler
Set-Service -Name Spooler -StartupType Disabled

🟩 Desactivar ejecución automática de USB

Código

gpedit.msc

Ruta:

Código

Plantillas administrativas → Componentes de Windows → Directivas de reproducción automática

📌 Ejercicio 2 — Hardening básico

  1. Desactiva Print Spooler
  2. Desactiva Remote Registry
  3. Comprueba que no vuelven a iniciarse

🟦 3. Políticas de seguridad (Local Security Policy y GPO)

Windows tiene un sistema muy potente de políticas.

🟩 Abrir políticas locales

Código

secpol.msc

🟩 Configuraciones importantes

🔹 Política de contraseñas

Código

Directivas de cuenta → Directiva de contraseñas

🔹 Bloqueo de cuenta

Código

Directivas de cuenta → Directiva de bloqueo de cuenta

🔹 Derechos de usuario

Código

Directivas locales → Asignación de derechos de usuario

Aquí puedes controlar:

  • quién puede iniciar sesión por RDP
  • quién puede apagar el sistema
  • quién puede ejecutar tareas programadas

📌 Ejercicio 3 — endurecer políticas

  1. Establece longitud mínima de contraseña: 10
  2. Establece bloqueo tras 5 intentos
  3. Deniega “Iniciar sesión localmente” al usuario pruebas

🟦 4. Auditoría del sistema (saber quién hace qué)

Windows puede registrar:

  • accesos a archivos
  • cambios en permisos
  • inicios de sesión
  • fallos de autenticación
  • cambios en servicios
  • cambios en políticas

🟩 Activar auditoría avanzada

Código

secpol.msc

Ruta:

Código

Directivas locales → Directiva de auditoría

Activa:

  • Auditoría de inicio de sesión
  • Auditoría de acceso a objetos
  • Auditoría de cambios de directivas
  • Auditoría de uso de privilegios

🟩 Ver logs

Código

eventvwr.msc

O desde PowerShell:

powershell

Get-WinEvent -LogName Security -MaxEvents 20

📌 Ejercicio 4 — Auditoría real

  1. Activa auditoría de acceso a objetos
  2. En C:\seguridad, activa auditoría para tu usuario
  3. Accede al archivo
  4. Mira en el Visor de eventos → Security
  5. Encuentra el evento de acceso

🟦 5. Control remoto seguro

Ya tienes SSH funcionando, lo cual es excelente.

🟩 Buenas prácticas

  • Deshabilitar contraseña → usar claves SSH
  • Cambiar el puerto (opcional)
  • Limitar usuarios permitidos
  • Registrar accesos

🟩 Ver quién se conecta por SSH

powershell

Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4624 }

📌 Ejercicio 5 — endurecer SSH

  1. Edita C:\ProgramData\ssh\sshd_config
  2. Cambia:

Código

PasswordAuthentication no
  1. Añade tu clave pública
  2. Reinicia SSH:

powershell

Restart-Service sshd

🟦 6. Buenas prácticas de servidor

  • No usar el usuario administrador para tareas diarias
  • Desactivar servicios innecesarios
  • Mantener Windows actualizado
  • Usar firewall estricto
  • No instalar software innecesario
  • Usar logs y auditoría
  • Automatizar tareas críticas
  • Usar PowerShell para todo lo repetitivo

🟦 MINI‑RETO DEL BLOQUE

Crea un entorno seguro:

  1. Carpeta C:\datos con permisos solo para tu usuario
  2. Auditoría activada sobre esa carpeta
  3. Puerto 2222 abierto para SSH
  4. SSH configurado solo con claves
  5. Servicio Print Spooler desactivado
  6. Política de contraseñas endurecida
  7. Log de los últimos 50 eventos de seguridad guardado en C:\logs\seguridad.txt

🟢 Cuando termines este bloque, pasamos al siguiente:

Automatización avanzada en Windows: scripts, tareas programadas, servicios personalizados, y orquestación.

Automatización avanzada en Windows: scripts, tareas programadas, servicios personalizados, y orquestación.

Entramos en el BLOQUE 6: Automatización avanzada en Windows, donde vas a aprender a hacer que Windows trabaje para ti como un servidor profesional.

Este bloque es muy potente porque combina:

  • PowerShell avanzado
  • Servicios personalizados
  • Tareas programadas
  • Scripts que se ejecutan solos
  • Automatización remota
  • Orquestación entre Windows y tu Mac
  • Ejercicios prácticos reales

Vamos a construir automatizaciones que podrías usar en un entorno profesional.

🟦 BLOQUE 6 — Automatización avanzada en Windows

🟩 1. Automatización con PowerShell (scripts inteligentes)

Aquí vamos a crear scripts que:

  • se configuran solos
  • se ejecutan solos
  • se reinician solos
  • generan logs
  • se comportan como “micro‑servicios”

📌 Ejercicio 1 — Script que se auto‑configura

Crea un script que:

  1. Comprueba si existe una carpeta
  2. Si no existe, la crea
  3. Si existe, escribe un log
  4. Si falla, captura el error

powershell

param([string]$Ruta = "C:\auto")

try {
    if (-not (Test-Path $Ruta)) {
        New-Item -ItemType Directory -Path $Ruta
        "Carpeta creada: $Ruta" | Out-File C:\auto.log -Append
    } else {
        "La carpeta ya existía: $Ruta" | Out-File C:\auto.log -Append
    }
}
catch {
    "ERROR: $($_.Exception.Message)" | Out-File C:\auto.log -Append
}

Ejecuta:

powershell

.\auto.ps1

🟩 2. Automatización con el Programador de Tareas (cron de Windows)

El Programador de Tareas es muy potente. Puedes ejecutar scripts:

  • al iniciar Windows
  • al iniciar sesión
  • cada X minutos
  • cuando un evento ocurre
  • cuando un servicio falla
  • cuando se conecta un usuario
  • cuando se crea un archivo

📌 Ejercicio 2 — Ejecutar un script cada minuto

  1. Crea un script:

powershell

"$(Get-Date) - Tarea ejecutada" | Out-File C:\tarea.log -Append

Guárdalo como:

Código

C:\tarea.ps1
  1. Crea la tarea:

powershell

schtasks /create /tn "TareaCadaMinuto" /tr "powershell.exe -File C:\tarea.ps1" /sc minute
  1. Comprueba:

powershell

schtasks /query /tn "TareaCadaMinuto"

🟩 3. Automatización basada en eventos (muy avanzada)

Windows puede ejecutar scripts cuando ocurre un evento del sistema.

Ejemplos:

  • Cuando alguien inicia sesión
  • Cuando alguien falla un login
  • Cuando se crea un archivo
  • Cuando un servicio falla
  • Cuando se conecta un USB

📌 Ejercicio 3 — Ejecutar un script cuando alguien inicia sesión

  1. Abre:

Código

taskschd.msc
  1. Crea una tarea nueva:
  • Trigger: “Al iniciar sesión”
  • Acción: ejecutar un script PowerShell
  • Script: escribe un log con la hora y el usuario

Ejemplo de script:

powershell

"$(Get-Date) - Inicio de sesión de $env:USERNAME" | Out-File C:\logins.log -Append

🟩 4. Crear un servicio personalizado (como systemd)

Esto es nivel profesional.

Vamos a crear un servicio que:

  • se ejecuta en segundo plano
  • se reinicia si falla
  • no necesita sesión iniciada

📌 Ejercicio 4 — Crear un servicio PowerShell

  1. Crea un script que nunca termine:

powershell

while ($true) {
    "$(Get-Date) - Servicio activo" | Out-File C:\servicio.log -Append
    Start-Sleep 10
}

Guárdalo como:

Código

C:\servicio.ps1
  1. Instala el servicio usando NSSM (herramienta estándar en Windows Server).

Descarga NSSM (si quieres te explico cómo instalarlo).

  1. Crea el servicio:

Código

nssm install MiServicio
  • Application: powershell.exe
  • Arguments: -File C:\servicio.ps1
  1. Inicia el servicio:

powershell

Start-Service MiServicio

🟩 5. Automatización remota (Windows ↔ macOS)

Ya que tu Windows tiene SSH, puedes:

  • ejecutar scripts desde tu Mac
  • copiar archivos
  • automatizar tareas
  • reiniciar servicios
  • monitorizar procesos

📌 Ejercicio 5 — Ejecutar un script remoto desde tu Mac

En tu Mac:

bash

ssh david@IP-de-tu-windows "powershell.exe -Command Get-Process"

Ejecutar un script remoto:

bash

ssh david@IP-de-tu-windows "powershell.exe -File C:\tarea.ps1"

🟩 6. Orquestación (automatizar varias máquinas)

Esto es opcional, pero muy potente.

Puedes:

  • ejecutar un script en varias máquinas
  • recopilar logs
  • reiniciar servicios en lote
  • desplegar software

Ejemplo:

powershell

Invoke-Command -ComputerName windows1,windows2 -ScriptBlock {
    Get-Service sshd
}

Las dos grandes formas de conectarse remotamente a Windows

Windows tiene dos sistemas de administración remota:

🟩 1. SSH (moderno, universal, multiplataforma)

  • Funciona igual que en Linux
  • Usa claves SSH
  • Permite ejecutar PowerShell y CMD
  • Perfecto para tu Mac-mini
  • Seguro, simple, estándar

Ya lo dominas.

🟩 2. WinRM / PowerShell Remoting (el sistema nativo de Windows)

Este es el que te sonaba: Invoke-Command, Enter-PSSession, New-PSSession, etc.

Es más antiguo que SSH, pero mucho más potente dentro del ecosistema Windows.

🟦 ¿Qué es WinRM / PowerShell Remoting?

Es el sistema nativo de Windows para:

  • ejecutar comandos remotos
  • crear sesiones persistentes
  • administrar servicios
  • administrar el registro
  • ejecutar scripts completos
  • copiar archivos
  • orquestar varias máquinas a la vez

Funciona sobre:

  • HTTP/HTTPS
  • WS-Man (Web Services for Management)
  • Kerberos (si hay dominio)
  • NTLM (si no hay dominio)

Es decir: es el “SSH de Windows”, pero con superpoderes dentro del propio Windows.

🟦 ¿Por qué se usa menos hoy?

Porque:

  • SSH es más universal
  • WinRM es más complejo de configurar
  • WinRM no funciona bien fuera de redes Windows
  • WinRM requiere abrir puertos específicos
  • WinRM usa protocolos propios de Microsoft

Pero en entornos Windows puros (empresas, servidores, Active Directory)… WinRM sigue siendo el rey.

🟦 Cómo funciona WinRM (PowerShell Remoting)

🟩 1. Habilitarlo

En la máquina remota:

powershell

Enable-PSRemoting -Force

Esto:

  • habilita WinRM
  • abre el firewall
  • crea listeners HTTP
  • configura permisos

🟩 2. Conectarse a otra máquina

🔹 Sesión interactiva (como SSH)

powershell

Enter-PSSession -ComputerName NOMBRE -Credential (Get-Credential)

🔹 Ejecutar un comando remoto

powershell

Invoke-Command -ComputerName NOMBRE -ScriptBlock { Get-Process }

🔹 Crear una sesión persistente

powershell

$sesion = New-PSSession -ComputerName NOMBRE
Invoke-Command -Session $sesion -ScriptBlock { Get-Service }

🟦 ¿Qué ventajas tiene sobre SSH?

Aquí viene lo interesante.

🟩 1. Acceso completo al sistema

SSH solo te da una shell. WinRM te da acceso a:

  • servicios
  • registro
  • firewall
  • WMI
  • eventos
  • políticas
  • certificados
  • Active Directory

🟩 2. Sesiones persistentes

Puedes mantener una sesión abierta en segundo plano:

powershell

$sesion = New-PSSession -ComputerName PC1
Invoke-Command -Session $sesion -ScriptBlock { hostname }

🟩 3. Orquestación de varias máquinas

Esto es brutal:

powershell

Invoke-Command -ComputerName PC1,PC2,PC3 -ScriptBlock { Get-Service sshd }

🟩 4. Copiar archivos remotamente

SSH usa SCP. WinRM usa:

powershell

Copy-Item -Path archivo.txt -Destination C:\ -ToSession $sesion

🟩 5. Integración con Active Directory

Puedes ejecutar comandos como:

powershell

Invoke-Command -ComputerName Servidor -ScriptBlock { Get-ADUser -Filter * }

SSH no puede hacer eso.

🟦 ¿Qué desventajas tiene?

  • Más difícil de configurar
  • No funciona bien fuera de redes Windows
  • No es multiplataforma
  • Depende de servicios de Windows
  • Más atacado históricamente (por estar muy integrado)

Por eso hoy en día:

  • SSH para administración moderna
  • WinRM para administración empresarial avanzada

🟦 Ejemplo práctico para que lo entiendas de verdad

Supón que tienes dos Windows:

  • Windows-A
  • Windows-B

En Windows-B habilitas:

powershell

Enable-PSRemoting -Force

Desde Windows-A:

🔹 Entras en Windows-B como si fuera SSH:

powershell

Enter-PSSession -ComputerName Windows-B

🔹 Ejecutas un comando remoto:

powershell

Invoke-Command -ComputerName Windows-B -ScriptBlock { Get-Process }

🔹 Creas una sesión persistente:

powershell

$ses = New-PSSession -ComputerName Windows-B
Invoke-Command -Session $ses -ScriptBlock { Get-Service }

🔹 Copias un archivo:

powershell

Copy-Item archivo.txt -Destination C:\ -ToSession $ses

🔹 Sales:

powershell

Remove-PSSession $ses

Pero aprender WinRM te da superpoderes

Porque:

  • es la forma nativa de administrar Windows
  • es lo que usan los administradores de sistemas
  • es lo que usan las empresas
  • es lo que usa PowerShell en su máximo potencial

Y además, te prepara para:

  • Active Directory
  • Windows Server
  • Automatización masiva
  • Orquestación de máquinas

1. Qué es WinRM realmente

  • WinRM = Windows Remote Management
  • Es la implementación de Microsoft del protocolo WS-Management (WS-Man), un estándar para administración remota sobre HTTP/HTTPS.
  • PowerShell Remoting se apoya en WinRM para:
    • ejecutar comandos remotos
    • abrir sesiones interactivas
    • orquestar muchas máquinas a la vez
    • exponer “endpoints” de administración controlados

Piensa: SSH es una puerta a una shell; WinRM es una API de administración de Windows con PowerShell como lenguaje.

2. Ejecución remota de comandos y scripts

2.1. Comandos puntuales

powershell

Invoke-Command -ComputerName Servidor1 -ScriptBlock { Get-Process }
  • Ejecuta el bloque en la máquina remota.
  • Devuelve los resultados a tu sesión local (como objetos deserializados).

Puedes pasar parámetros:

powershell

Invoke-Command -ComputerName Servidor1 -ScriptBlock {
    param($Nombre)
    Get-Service -Name $Nombre
} -ArgumentList "sshd"

2.2. Scripts completos

powershell

Invoke-Command -ComputerName Servidor1 -FilePath C:\scripts\mantenimiento.ps1

Eso te permite tener un repositorio de scripts y lanzarlos en remoto sin copiar nada manualmente.

3. Sesiones remotas persistentes

Aquí es donde WinRM se separa de SSH.

3.1. Sesión interactiva (tipo “ssh”)

powershell

Enter-PSSession -ComputerName Servidor1 -Credential (Get-Credential)
  • Lo que escribes se ejecuta en el remoto.
  • El prompt cambia para indicarte que estás “dentro”.

3.2. Sesiones reutilizables

powershell

$ses = New-PSSession -ComputerName Servidor1

Invoke-Command -Session $ses -ScriptBlock { Get-Service }
Invoke-Command -Session $ses -ScriptBlock { Get-EventLog -LogName System -Newest 5 }

Remove-PSSession $ses
  • Mantienes contexto (módulos cargados, variables, etc.).
  • Ideal para automatizaciones largas o repetitivas.

4. Administración 1 a muchos (orquestación)

WinRM brilla cuando no es “yo ↔ una máquina”, sino “yo ↔ muchas máquinas”.

powershell

Invoke-Command -ComputerName Servidor1,Servidor2,Servidor3 -ScriptBlock {
    Get-Service sshd
}

O con una lista:

powershell

$servidores = "Srv1","Srv2","Srv3"
Invoke-Command -ComputerName $servidores -ScriptBlock {
    Get-ComputerInfo | Select-Object CsName, OsName, OsVersion
}
  • Puedes lanzar el mismo comando en decenas o cientos de equipos.
  • Recibes una salida etiquetada por máquina.

Esto es administración de parque, no de “mi PC”.

5. Copia de archivos y despliegues

WinRM no es SCP, pero PowerShell lo integra:

5.1. Copiar hacia el remoto

powershell

$ses = New-PSSession -ComputerName Servidor1
Copy-Item -Path .\app.config -Destination "C:\app\app.config" -ToSession $ses

5.2. Copiar desde el remoto

powershell

Copy-Item -Path "C:\logs\*.log" -Destination .\logs -FromSession $ses

Con esto puedes:

  • desplegar configuraciones
  • recoger logs
  • distribuir scripts

Sin montar shares ni usar SMB.

6. Acceso profundo al sistema: servicios, registro, eventos, WMI

Con WinRM + PowerShell Remoting puedes tocar casi todo:

6.1. Servicios

powershell

Invoke-Command -ComputerName Servidor1 -ScriptBlock {
    Get-Service sshd
    Restart-Service sshd
}

6.2. Registro

powershell

Invoke-Command -ComputerName Servidor1 -ScriptBlock {
    Get-Item "HKLM:\Software\Microsoft\Windows\CurrentVersion"
}

6.3. Eventos

powershell

Invoke-Command -ComputerName Servidor1 -ScriptBlock {
    Get-WinEvent -LogName System -MaxEvents 10
}

6.4. WMI / CIM

powershell

Invoke-Command -ComputerName Servidor1 -ScriptBlock {
    Get-CimInstance Win32_OperatingSystem
}

Esto es lo que lo hace tan potente en entornos de servidor: no solo ejecutas comandos, administras el sistema entero.

7. Endpoints personalizados y Just Enough Administration (JEA)

Aquí entramos en el “modo enterprise”.

7.1. Endpoints de PowerShell

Puedes definir “puntos de entrada” remotos con capacidades limitadas:

  • qué comandos se pueden ejecutar
  • con qué permisos reales se ejecutan
  • qué módulos están disponibles

Ejemplo conceptual:

powershell

Register-PSSessionConfiguration -Name "Soporte" -RunAsCredential Admin -VisibleCmdlets Get-Service,Restart-Service

Un usuario se conecta a ese endpoint y solo puede usar esos cmdlets, aunque por debajo se ejecuten con permisos de administrador.

7.2. JEA (Just Enough Administration)

Es una arquitectura para:

  • delegar tareas de administración
  • sin dar permisos de administrador completos
  • usando endpoints restringidos y roles definidos

Esto es clave en seguridad: “Te dejo reiniciar servicios de IIS, pero no tocar nada más del servidor”.

8. Integración con RSAT y herramientas de administración

En entornos grandes se usa:

  • RSAT (Remote Server Administration Tools) en el equipo del administrador
  • Módulos de AD, DNS, DHCP, etc.
  • PowerShell Remoting para ejecutar esos módulos en los servidores remotos

Ejemplo:

powershell

Invoke-Command -ComputerName DC1 -ScriptBlock {
    Import-Module ActiveDirectory
    Get-ADUser -Filter *
}

Tu máquina no tiene AD, pero el servidor sí; tú solo “te conectas” a su contexto.

9. Seguridad, autenticación y transporte

WinRM soporta:

  • HTTP (por defecto, en redes internas)
  • HTTPS (con certificados, para redes menos confiables)
  • Autenticación:
    • Kerberos (dominio)
    • NTLM (workgroup)
    • CredSSP (delegación, con cuidado)

Buenas prácticas:

  • Usar HTTPS en redes no totalmente confiables
  • Limitar quién puede usar remoting (Set-PSSessionConfiguration)
  • Usar JEA para delegar tareas
  • Registrar y auditar el uso de remoting

10. Cosas que WinRM NO es (y así lo colocas mentalmente)

  • No es un reemplazo de SSH en entornos mixtos (ahí gana SSH).
  • No es una VPN.
  • No es un túnel genérico de puertos.
  • No es un sistema de archivos remoto.

Es: la capa de transporte para que PowerShell pueda administrar Windows a distancia, a lo grande.

11. Resumen rápido de “todo lo que puedes hacer” con WinRM

Con WinRM + PowerShell Remoting puedes:

  • Ejecutar comandos y scripts en remoto (1 a 1 y 1 a muchos).
  • Abrir sesiones remotas persistentes.
  • Orquestar decenas o cientos de máquinas a la vez.
  • Copiar archivos hacia y desde máquinas remotas.
  • Administrar servicios, registro, firewall, eventos, WMI, AD…
  • Definir endpoints restringidos (JEA) para delegar administración segura.
  • Integrarte con RSAT y módulos de servidor.
  • Automatizar tareas de mantenimiento, despliegue y auditoría a escala.

BLOQUE 7 — WSL (Windows Subsystem for Linux)

🟦 BLOQUE 8 — Desarrollo en Windows (VSCode, Docker, entornos, automatización híbrida)

Y como siempre: todo mezclado con ejercicios prácticos, para que no solo lo entiendas, sino que lo domines.

Este bloque es muy divertido porque convierte tu Windows en un híbrido Windows+Linux, ideal para desarrollo, scripting, servidores y automatización.

🟩 BLOQUE 7 — WSL (Windows Subsystem for Linux)

WSL te permite ejecutar Linux nativo dentro de Windows, sin máquinas virtuales, sin Hyper‑V, sin overhead. Es como tener Ubuntu, Debian o Arch dentro de Windows, compartiendo archivos y red.

Vamos paso a paso.

🟦 1. Instalar WSL

En PowerShell como administrador:

powershell

wsl --install

Esto instala:

  • WSL2
  • Ubuntu por defecto
  • Kernel Linux real
  • Integración con Windows

Reinicia Windows y ya tienes Linux dentro.

🟦 2. Comandos esenciales de WSL

Ver distribuciones instaladas:

powershell

wsl --list --verbose

Instalar otra distro:

powershell

wsl --install -d Debian

Entrar en Linux:

powershell

wsl

Ejecutar un comando Linux desde Windows:

powershell

wsl ls -la

Ejecutar un comando Windows desde Linux:

bash

notepad.exe

🟦 3. Sistema de archivos híbrido

Desde Windows → Linux:

Código

\\wsl$\Ubuntu\home\david

Desde Linux → Windows:

bash

cd /mnt/c/Users/david/Desktop

🟦 4. Integración con VSCode

En Windows:

powershell

code .

En Linux (WSL):

bash

code .

VSCode detecta que estás en WSL y abre un entorno Linux real.

🟦 5. Integración con Docker

Docker Desktop usa WSL2 como backend. Esto significa:

  • contenedores Linux nativos
  • sin Hyper‑V
  • sin máquinas virtuales pesadas

🟦 6. Ejercicios prácticos de WSL

📌 Ejercicio 1 — Instalar WSL y Ubuntu

powershell

wsl --install

📌 Ejercicio 2 — Crear un script Linux y ejecutarlo desde Windows

En WSL:

bash

echo "echo Hola desde Linux" > hola.sh
chmod +x hola.sh

Desde Windows:

powershell

wsl ./hola.sh

📌 Ejercicio 3 — Crear un script Windows y ejecutarlo desde Linux

En Windows:

powershell

echo "Write-Output 'Hola desde Windows'" > C:\hola.ps1

En Linux:

bash

powershell.exe -File /mnt/c/hola.ps1

📌 Ejercicio 4 — Compilar algo en Linux y usarlo en Windows

En WSL:

bash

sudo apt install gcc
echo 'int main(){printf("Hola mundo\n");}' > hola.c
gcc hola.c -o hola

Ejecutarlo desde Windows:

powershell

wsl ./hola

🟩 BLOQUE 8 — Desarrollo en Windows (VSCode, Docker, entornos, automatización híbrida)

Este bloque convierte tu Windows en un entorno de desarrollo profesional.

🟦 1. VSCode como IDE universal

VSCode puede trabajar en:

  • Windows
  • WSL (Linux)
  • Contenedores Docker
  • SSH remoto

Todo desde la misma interfaz.

Extensiones recomendadas:

  • Remote – WSL
  • Remote – SSH
  • Remote – Containers
  • Python
  • C/C++
  • PowerShell
  • Docker

🟦 2. Docker con WSL2

Docker Desktop usa WSL2 como motor. Esto te da:

  • contenedores Linux nativos
  • integración con Windows
  • integración con WSL
  • rendimiento casi igual que en Linux real

Comandos básicos:

powershell

docker run hello-world
docker ps
docker images
docker exec -it contenedor bash

🟦 3. Entornos de desarrollo híbridos

Puedes tener:

  • Código en Windows
  • Compilación en Linux (WSL)
  • Contenedores Docker Linux
  • Scripts PowerShell para automatizar
  • SSH para administración remota

Es un entorno extremadamente flexible.

🟦 4. Ejercicios prácticos de desarrollo

📌 Ejercicio 1 — Crear un proyecto Python en WSL y editarlo en VSCode

En WSL:

bash

mkdir proyecto
cd proyecto
python3 -m venv venv
source venv/bin/activate
pip install flask

Abrir en VSCode:

bash

code .

📌 Ejercicio 2 — Crear un contenedor Docker desde WSL

En WSL:

bash

echo -e "FROM python:3.10\nCMD [\"python3\", \"-c\", \"print('Hola desde Docker')\"]" > Dockerfile
docker build -t hola .
docker run hola

📌 Ejercicio 3 — Automatización híbrida Windows+Linux

Crea un script PowerShell que:

  1. Ejecuta un comando Linux
  2. Ejecuta un comando Windows
  3. Ejecuta un contenedor Docker
  4. Guarda logs en Windows

Ejemplo:

powershell

"--- Linux ---" | Out-File C:\dev.log -Append
wsl uname -a | Out-File C:\dev.log -Append

"--- Windows ---" | Out-File C:\dev.log -Append
Get-Date | Out-File C:\dev.log -Append

"--- Docker ---" | Out-File C:\dev.log -Append
docker run hello-world | Out-File C:\dev.log -Append

🟦 MINI‑RETO FINAL (para cerrar Windows por completo)

Crea un entorno de desarrollo completo:

  1. Instala WSL2 con Ubuntu
  2. Instala VSCode con Remote‑WSL
  3. Instala Docker Desktop
  4. Crea un proyecto Python en WSL
  5. Crea un contenedor Docker que ejecute ese proyecto
  6. Automatiza todo con un script PowerShell
  7. Ejecuta el script desde tu Mac por SSH

Si haces esto, tienes un entorno profesional de desarrollo Windows + Linux + Docker + PowerShell + SSH.

Publicaciones Similares

  • Hablando de WINDOWS y comparando con linux y Mac.

    1. USB de Microsoft El “USB de Microsoft” para formatear Windows. Ningún portátil Windows (HP, Asus, Lenovo, Dell, Surface, Framework…) viene con un USB físico de Microsoft incluido de fábrica.Eso es algo que tú creas gratis en 10 minutos: Todos los portátiles premium 2026 tienen también partición de recuperación integrada (pulsas F11 o Shift+Reinicio al encender).Así que no es…

  • Cmd-let y otras cosas

    Vamos a hacer la explicación definitiva sobre los cmdlets de PowerShell y toda la “nomenclatura mental” que necesitas para entender cualquier cmdlet, incluso uno que nunca hayas visto. Esto es clave porque PowerShell no es un “lenguaje de comandos”, sino un lenguaje de objetos, y cuando entiendes su estructura, puedes leer cualquier comando como si…

  • Windows, segunda parte

    Ahora que tienes Windows funcionando como un servidor en tu Mac‑mini, es el momento perfecto para aprenderlo bien. Te voy a preparar una guía completa, clara y práctica, pensada para alguien que ya domina macOS y Linux. Así verás Windows con ojos de power‑user, no como un usuario normal. Voy a dividirlo en secciones para…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *