RETO GRUPAL: Sistema de Gestión de Servicios de Windows¶
Módulo: Administración de Sistemas Operativos (ASO)
Unidad: PowerShell
Modalidad: Trabajo en grupo (2-3 personas)
Puntuación: 30 puntos (sobre 100)
Criterios evaluados: CE7a, CE7b, CE7c, CE7d, CE7e, CE7f, CE7g, CE7h y CE7i
Defensa del proyecto: Obligatoria, duración 20-30 minutos
Objetivo del Reto¶
Crear un sistema completo de gestión de servicios de Windows que integre todos los conceptos aprendidos durante la unidad de PowerShell. El sistema debe permitir gestionar servicios, monitorear procesos y recursos del sistema, realizar copias de seguridad y mantener logs del sistema.
Este reto te permitirá demostrar tu dominio de:
- Estructuras de control (if, switch, while, for, foreach)
- Funciones y modularización con parámetros tipados
- Variables con tipado implícito y explícito
- Cmdlets de PowerShell para administración de Windows
- Gestión de archivos y directorios
- Trabajo con objetos y colecciones
Requisitos del Sistema¶
Funcionalidades Obligatorias¶
El sistema debe incluir las siguientes funcionalidades organizadas en módulos:
1. Menú Principal Interactivo¶
- Menú con opciones numeradas
- Navegación entre módulos
- Opción de salida del sistema
- Interfaz clara y amigable usando
Write-Hostcon colores
2. Gestión de Servicios de Windows¶
- Listar servicios: Mostrar todos los servicios registrados con su estado
- Añadir servicio a seguimiento: Registrar servicios para monitoreo personalizado
- Buscar servicio: Buscar servicios por nombre, estado, tipo de inicio, etc.
- Modificar seguimiento: Editar información de servicios en seguimiento
- Eliminar de seguimiento: Eliminar servicios del sistema de seguimiento
- Controlar servicios: Iniciar, detener, pausar, reanudar servicios
Datos de cada servicio:
- Nombre del servicio
- Nombre para mostrar (DisplayName)
- Estado actual (Running, Stopped, Paused)
- Tipo de inicio (Automatic, Manual, Disabled)
- Descripción
- Proceso asociado (PID)
3. Monitoreo del Sistema¶
- Estado de servicios: Verificar estado de servicios usando
Get-Service - Uso de recursos: Mostrar información de:
- Memoria (cmdlet
Get-CimInstance Win32_OperatingSystem) - Disco (cmdlet
Get-PSDriveoGet-CimInstance Win32_LogicalDisk) - CPU (cmdlet
Get-Processcon uso de CPU) - Procesos más consumidores de recursos
- Visualización de logs: Mostrar logs del sistema y eventos de Windows
4. Sistema de Copias de Seguridad¶
- Crear backup: Generar copias de seguridad comprimidas (
.zip) - Restaurar backup: Restaurar datos desde un backup
- Listar backups: Mostrar backups disponibles
- Eliminar backup: Eliminar backups antiguos
5. Gestión de Logs¶
- Registrar acciones del sistema en archivos de log
- Diferentes tipos de logs (sistema, errores, eventos)
- Formato con fecha y hora de cada acción usando
Get-Date - Integración con Event Viewer de Windows
6. Configuración del Sistema¶
- Archivo de configuración centralizado (formato CSV o JSON)
- Variables tipadas configurables
- Configuración de rutas y directorios
- Parámetros del sistema
7. Gestión de Procesos (Opcional pero Recomendado)¶
- Listar procesos del sistema
- Filtrar procesos por nombre, CPU, memoria
- Detener procesos específicos
- Monitoreo de procesos críticos
- Alertas cuando procesos consumen demasiados recursos
8. Simulación de Servicios (Opcional pero Recomendado)¶
- Simulación de servicios para pruebas sin necesidad de modificar servicios reales
- Creación de servicios temporales o ficticios para pruebas
- Uso de servicios existentes de Windows en modo de prueba
- Simulación de cambios de estado de servicios
- Verificación de comportamiento del sistema con servicios simulados
Estructura del Proyecto¶
El proyecto debe estar organizado de forma modular con la siguiente estructura:
sistema_gestion_servicios/
├── Menu-Principal.ps1 # Script principal del sistema
├── Funciones-Servicio.ps1 # Módulo de gestión de servicios
├── Monitoreo-Sistema.ps1 # Módulo de monitoreo del sistema
├── Backup-Sistema.ps1 # Módulo de copias de seguridad
├── Configuracion.csv # Archivo de configuración (CSV)
├── Servicios-Seguimiento.csv # Base de datos de servicios (formato CSV)
├── Simulador-Servicios.ps1 # Script para simular servicios (opcional)
├── logs/ # Directorio de logs
│ ├── sistema.log
│ └── errores.log
└── backups/ # Directorio de backups
└── backup_servicios_YYYYMMDD.zip
Descripción de Archivos¶
Menu-Principal.ps1¶
- Script principal que inicia el sistema
- Carga los módulos necesarios usando
.(notación de punto) - Implementa el menú principal con
switch - Gestiona la navegación entre módulos
Funciones-Servicio.ps1¶
- Funciones para gestión CRUD de servicios
- Lectura y escritura en
Servicios-Seguimiento.csv - Validación de datos usando operadores de comparación
- Uso de cmdlets
Get-Service,Start-Service,Stop-Service, etc. - Formato de datos: CSV con columnas separadas por comas
¿Qué es CRUD?
CRUD se refiere a las cuatro operaciones fundamentales para interactuar con los datos en una base de datos o sistema de almacenamiento: Crear, Leer, Actualizar y Eliminar (del inglés Create, Read, Update, Delete).
Monitoreo-Sistema.ps1¶
- Funciones de monitoreo de servicios y procesos
- Verificación de estado con
Get-Service - Obtención de información del sistema usando CIM/WMI
- Visualización de logs y eventos
- Uso de
Get-EventLogpara eventos del sistema
Backup-Sistema.ps1¶
- Funciones para crear, restaurar, listar y eliminar backups
- Uso de
Compress-Archivepara compresión ZIP - Gestión del directorio de backups
- Uso de
Expand-Archivepara restaurar
Configuracion.csv¶
- Variables de configuración del sistema en formato CSV
- Rutas de directorios
- Configuraciones de logs y backups
- Parámetros del sistema
Servicios-Seguimiento.csv¶
- Base de datos de servicios en formato CSV
- Columnas: Nombre, DisplayName, Estado, TipoInicio, Descripcion, PID
Simulador-Servicios.ps1 (Opcional)¶
- Script para simular servicios de Windows
- Funciones para crear y gestionar servicios simulados
- Uso de objetos personalizados
[PSCustomObject] - Integración con el sistema de seguimiento
Técnicas PowerShell Requeridas¶
El sistema debe demostrar el uso de:
Estructuras de Control¶
if,elseif,elsepara condicionesswitchpara menús y opciones múltiples (con opciones-wildcard,-regex)while,do-whilepara bucles y menús interactivosfor,foreachpara recorrer colecciones y arrays
Funciones y Modularización¶
- Definición de funciones con
Function Nombre-Funcion {} - Parámetros tipados con
param ([tipo] $parametro) - Uso de
.(notación de punto) para cargar módulos - Retorno de valores con
return - Funciones con validación de parámetros
Variables y Parámetros¶
- Variables con tipado implícito y explícito
- Parámetros del script usando
$args[] - Arrays y vectores con operador
@() - Operador de rango
..para generar secuencias - Variables de entorno usando
$env:
Operadores PowerShell¶
- Aritméticos:
+,-,*,/,%,+=,-=,++,-- - Comparación:
-eq,-ne,-lt,-gt,-le,-ge,-like,-contains - Lógicos:
-and,-or,-xor,-not,! - Tipo:
-is,-isnot,-as
Cmdlets del Sistema¶
Get-Servicepara gestión de serviciosStart-Service,Stop-Service,Restart-Servicepara control de serviciosGet-Processpara información de procesosGet-CimInstanceoGet-WmiObjectpara información del sistemaGet-EventLogpara eventos del sistemaCompress-Archive,Expand-Archivepara backupsGet-Content,Set-Content,Add-Contentpara archivosGet-Datepara fechas y horasImport-Csv,Export-Csvpara trabajar con CSV
Gestión de Archivos¶
- Lectura de archivos (
Get-Content,Import-Csv) - Escritura en archivos (
Set-Content,Add-Content,Export-Csv) - Verificación de existencia (
Test-Path) - Creación de directorios (
New-Item)
Trabajo con Objetos¶
- Acceso a propiedades de objetos con
. - Filtrado con
Where-Object - Ordenamiento con
Sort-Object - Selección de propiedades con
Select-Object - Agrupación con
Group-Object
Formato de Datos¶
Archivo Servicios-Seguimiento.csv¶
Cada línea representa un servicio con el siguiente formato:
Nombre,DisplayName,Estado,TipoInicio,Descripcion,PID
Ejemplo:
Spooler,Print Spooler,Running,Automatic,Servicio de cola de impresión,1234
WinRM,Windows Remote Management,Running,Automatic,Servicio de administración remota,5678
Archivo de Logs¶
Formato de cada entrada en los logs:
YYYY-MM-DD HH:MM:SS: Mensaje de la acción
Ejemplo:
2024-10-15 14:30:25: Servicio 'Spooler' añadido al seguimiento
2024-10-15 14:35:10: Backup creado - backup_servicios_20241015_143510.zip
Archivo de Configuración Configuracion.csv¶
Formato CSV con variables de configuración:
Variable,Valor
SistemaNombre,Sistema de Gestión de Servicios
Version,1.0
LogDir,logs
BackupDir,backups
Simulación de Servicios¶
Descripción¶
La funcionalidad de simulación de servicios permite probar el sistema de gestión sin necesidad de modificar servicios reales de Windows. Esta característica es opcional pero altamente recomendada ya que facilita las pruebas del sistema y demuestra el uso de técnicas avanzadas de PowerShell.
Funcionalidad¶
Los servicios simulados permiten:
- Probar el sistema de gestión con servicios ficticios o temporales
- Simular cambios de estado sin afectar servicios reales
- Verificar el comportamiento del sistema con diferentes configuraciones
- Demostrar el uso de técnicas avanzadas de PowerShell
Métodos de Simulación¶
Método 1: Usar Servicios Existentes de Windows (Recomendado)¶
La forma más segura es usar servicios reales de Windows que no sean críticos para el sistema, como servicios que se pueden detener e iniciar sin problemas:
# Listar servicios que se pueden usar para pruebas
Get-Service | Where-Object {$_.Status -eq 'Stopped' -and $_.StartType -ne 'Disabled'} | Select-Object Name, DisplayName
# Ejemplo: Usar el servicio "Spooler" (si está detenido)
$servicioPrueba = Get-Service -Name "Spooler"
Write-Host "Estado actual: $($servicioPrueba.Status)"
Servicios recomendados para pruebas:
| Servicio | Nombre | Descripción |
|---|---|---|
| Spooler | Spooler | Servicio de cola de impresión (puede detenerse si no hay impresoras) |
| Themes | Themes | Servicio de temas de Windows |
| TabletInputService | TabletInputService | Servicio de entrada de tableta (si no se usa) |
| WSearch | WSearch | Servicio de búsqueda de Windows |
Método 2: Crear Servicios Temporales con sc.exe¶
Usando el comando sc.exe se pueden crear servicios temporales (requiere permisos de administrador):
# Crear un servicio temporal
sc.exe create "ServicioPrueba" binPath= "C:\Windows\System32\notepad.exe" start= demand
# Verificar que se creó
Get-Service -Name "ServicioPrueba"
# Eliminar el servicio temporal
sc.exe delete "ServicioPrueba"
Método 3: Simular con Jobs de PowerShell¶
Crear trabajos de PowerShell que simulen el comportamiento de servicios:
# Función para simular un servicio
function Start-ServicioSimulado {
param(
[string]$NombreServicio,
[int]$Puerto
)
$job = Start-Job -ScriptBlock {
param($nombre, $puerto)
while ($true) {
Write-Output "$nombre ejecutándose en puerto $puerto"
Start-Sleep -Seconds 5
}
} -ArgumentList $NombreServicio, $Puerto
Write-Host "Servicio simulado '$NombreServicio' iniciado (Job ID: $($job.Id))"
return $job
}
# Iniciar servicio simulado
$servicio1 = Start-ServicioSimulado -NombreServicio "WebService" -Puerto 8080
# Detener servicio simulado
Stop-Job -Id $servicio1.Id
Remove-Job -Id $servicio1.Id
Método 4: Simular Estados con Variables¶
Crear un sistema de seguimiento que simule servicios usando variables y objetos personalizados:
# Crear objeto de servicio simulado
$servicioSimulado = [PSCustomObject]@{
Nombre = "ServicioWebSimulado"
DisplayName = "Servicio Web Simulado"
Estado = "Running"
TipoInicio = "Automatic"
Descripcion = "Servicio simulado para pruebas"
PID = $null
FechaCreacion = Get-Date
}
# Función para cambiar estado simulado
function Set-EstadoServicioSimulado {
param(
[PSCustomObject]$Servicio,
[ValidateSet("Running", "Stopped", "Paused")]
[string]$NuevoEstado
)
$Servicio.Estado = $NuevoEstado
Write-Host "Estado de $($Servicio.Nombre) cambiado a: $NuevoEstado"
}
# Cambiar estado
Set-EstadoServicioSimulado -Servicio $servicioSimulado -NuevoEstado "Stopped"
Criterios de Evaluación¶
- Funcionalidad (15 puntos)
- Sistema completamente funcional
- Todas las funcionalidades requeridas implementadas
- Sin errores de ejecución
- Manejo correcto de errores con
try-catch
- Estructura del Código (5 puntos)
- Código organizado y modular
- Comentarios detallados en cada línea
- Separación clara de responsabilidades
- Nombres descriptivos siguiendo convenciones PowerShell (Verbo-Sustantivo)
- Uso de Conceptos PowerShell (5 puntos)
- Uso correcto de todas las técnicas aprendidas
- Variables tipadas correctamente
- Bucles, funciones y estructuras bien implementadas
- Uso adecuado de cmdlets de PowerShell
- Trabajo correcto con objetos y colecciones
- Documentación (3 puntos)
- README.md completo y profesional
- Instrucciones claras de instalación y uso
- Documentación de cada módulo
- Capturas de pantalla
- Defensa del Proyecto y Testing (2 puntos)
- Demostración fluida y completa del sistema funcionando
- Testing exhaustivo de todas las funcionalidades principales
- Explicación clara del código y decisiones de diseño
- Respuestas precisas a las preguntas del profesor
- Duración adecuada (20-30 minutos)
- Preparación previa evidente
Total: 30 puntos
Puntos Extra (Hasta +8 puntos)¶
- Interfaz gráfica con Windows Forms (+3 puntos)
- Integración con Event Viewer (+2 puntos)
- Gráficos ASCII con estadísticas (+2 puntos)
- Notificaciones del sistema (+1 punto)
- Exportación a HTML/XML (+1 punto)
Instrucciones de Entrega¶
Estructura de Entrega¶
- Crear directorio con el nombre:
reto_grupal_[nombre1]_[nombre2] - Incluir todos los archivos del proyecto:
- Scripts
.ps1con permisos de ejecución - Archivo de configuración
.csv - README.md con documentación completa
- Capturas de pantalla del sistema funcionando
- Comprimir en ZIP el directorio completo
- Subir al Moodle antes de la fecha límite
Contenido del README.md¶
El README.md debe incluir:
- Descripción del proyecto: Qué hace el sistema
- Instrucciones de instalación: Cómo configurar el sistema
- Guía de uso: Cómo usar cada funcionalidad
- Estructura del proyecto: Explicación de cada archivo
- Capturas de pantalla: Imágenes del sistema funcionando
- Autores: Nombres de los miembros del grupo
- Fecha: Fecha de entrega
Requisitos Técnicos¶
- Todos los scripts deben tener extensión
.ps1 - Todos los scripts deben seguir la política de ejecución de PowerShell
- El código debe estar completamente comentado
- El sistema debe funcionar sin errores
- Debe incluir manejo de errores con
try-catch - Usar nombres de funciones siguiendo convención Verbo-Sustantivo (ej:
Get-Servicio,Start-Servicio)
Política de Ejecución de Scripts¶
Si encuentras problemas con la política de ejecución, puedes usar:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
O ejecutar scripts individuales con:
powershell -ExecutionPolicy Bypass -File .\Menu-Principal.ps1
Defensa del Proyecto¶
Además de los requisitos de entrega mencionados anteriormente, se debe preparar la defensa del proyecto con testing. La defensa tendrá una duración de entre 20 y 30 minutos y debe incluir:
- Demostración en vivo del sistema funcionando
- Testing de las funcionalidades principales del sistema
- Explicación del código y decisiones de diseño
- Respuesta a preguntas del profesor sobre la implementación
Preparación recomendada:
- Probar todas las funcionalidades antes de la defensa
- Preparar ejemplos de uso para cada módulo
- Documentar casos de prueba y resultados esperados
- Estar preparado para explicar cualquier parte del código
Ejemplo de Funcionamiento¶
Menú Principal¶
==========================================
SISTEMA DE GESTIÓN DE SERVICIOS
==========================================
1) Gestión de servicios
2) Monitoreo del sistema
3) Copias de seguridad
4) Configuración del sistema
5) Salir
Selecciona una opción:
Gestión de Servicios¶
==========================================
GESTIÓN DE SERVICIOS
==========================================
1) Listar servicios
2) Añadir servicio al seguimiento
3) Buscar servicio
4) Modificar seguimiento
5) Eliminar de seguimiento
6) Controlar servicio (Iniciar/Detener)
7) Volver al menú principal
Selecciona una opción:
Consejos y Recomendaciones¶
Planificación¶
- Dividir el trabajo entre los miembros del grupo
- Crear primero la estructura básica del proyecto
- Implementar funcionalidad por funcionalidad
- Probar cada módulo antes de integrarlo
- Documentar mientras se desarrolla
Buenas Prácticas¶
- Usar nombres descriptivos siguiendo convención Verbo-Sustantivo
- Comentar cada línea de código importante
- Validar entradas del usuario con operadores de comparación
- Manejar errores de forma adecuada con
try-catch - Mantener el código organizado y limpio
- Usar tipado explícito cuando sea necesario
- Trabajar con objetos en lugar de texto cuando sea posible
Depuración¶
- Usar
Set-PSBreakpointpara establecer puntos de interrupción - Usar
Write-Hostcon colores para depuración visual - Probar cada función individualmente
- Verificar permisos de ejecución de scripts
- Usar
Get-Helppara consultar ayuda de cmdlets
Cmdlets Útiles¶
Get-Help <cmdlet>- Obtener ayuda de un cmdletGet-Command- Listar comandos disponiblesGet-Member- Ver propiedades y métodos de objetosFormat-Table,Format-List- Formatear salidaWhere-Object,Select-Object- Filtrar y seleccionar objetos
Recursos y Referencias¶
¡Éxito en el reto!
Este reto te permitirá demostrar todos los conocimientos adquiridos durante la unidad de PowerShell. ¡Trabaja en equipo, planifica bien y documenta todo!