Herramienta de auditoría de software para Windows con interfaz gráfica WPF desarrollada en PowerShell.
- Escaneo de software instalado vía registro de Windows
- Auditoría de componentes del sistema (Windows Features, Store Apps, Drivers)
- Verificación de versiones usando winget con caché configurable
- Control de actualizaciones (✅ Actualizado / ❌ Desactualizado /
⚠️ No verificado) - Interfaz gráfica WPF nativa de Windows 11 (esquinas redondeadas, sombra DWM)
- Tema claro/oscuro automático (sigue el tema del sistema) y manual
- Glifos Segoe Fluent Icons en toda la interfaz (sin emojis)
- Exportación de reportes a CSV compatible con Excel
- Copia de celdas individuales con clic derecho
- Filtros por estado: Todos, Actualizados, Desactualizados, No verificados
- Registro de auditoría (audit.log)
- Historial de actualizaciones de Windows (Hotfixes - últimos 90 días)
- Clasificación automática de software en Apps / Plataformas y Drivers
- Pestaña "Platforms & Drivers" con runtimes, frameworks y componentes
- Filtros de búsqueda por nombre en todas las pestañas
FEN-AuditSW/
├── FEN-AuditSW.ps1 # Punto de entrada principal
├── README.md # Documentación
├── audit.log # Registro de auditoría
├── assets/
│ ├── images/ # Recursos visuales (íconos, logos)
│ └── styles/
│ ├── Theme.xaml # Tema unificado claro/oscuro
│ └── SharedStyles.xaml # Estilos compartidos (botones de título)
├── ui/
│ ├── MainWindow.xaml # Definición de interfaz WPF
│ └── UI.ps1 # Lógica de la interfaz gráfica
└── modules/
├── audit/ # Módulos de auditoría
│ ├── Audit-System.ps1
│ └── Hotfixes.ps1
├── core/ # Funciones centrales
│ ├── Logging.ps1
│ ├── Version-Check.ps1
│ └── Get-InstalledApps.ps1
└── export/ # Exportación de datos
└── Export.ps1
WindowStyle="None"+WindowChrome+ DWM para bordes redondeados y sombra nativa- Ventana sin bordes del sistema operativo (GlassFrameThickness=0)
- Esquinas redondeadas de 8px al restaurar, cuadradas al maximizar
- El maximizado respeta el área de trabajo (WorkArea), sin ocultar la barra de tareas
- Minimizar, maximizar/restaurar y cerrar con glifos Segoe Fluent Icons
- Logo, nombre de la aplicación y versión
- Botón de tema (luna/sol) con glifo dinámico
- Minimizar (), Maximizar/Restaurar (/), Cerrar ()
- Arrastrable mediante
DragMove()en toda la barra
- Muestra contador de elementos según la pestaña activa:
- "Software Instalado" → "Seleccionados: N de M"
- "Platforms & Drivers" → "N elementos"
- "Software del Sistema" → "N elementos"
- Se actualiza automáticamente al cambiar de pestaña, filtrar o buscar
- Refrescar: Recarga ambas pestañas simultáneamente
- Exportar: Menú desplegable con opciones:
- "Export SW sistema" → exporta toda la tabla del sistema a CSV
- "Export SW instalado" → exporta solo el software seleccionado (checkbox) a CSV
- Cada opción abre un diálogo "Guardar como" nativo de Windows
- Software Instalado (Tab 0): Columnas: checkbox de selección, Nombre, Editor, Versión (icono + texto), Fecha Instalación, F. Ult. Actualización, Peso, PATH, F. Ult. Uso, Licencia, Vencimiento
- Platforms & Drivers (Tab 1): Columnas: Nombre, Editor, Versión, Fecha Instalación, Peso, PATH
- Software del Sistema (Tab 2): Columnas: Nombre, Versión, Origen, Proveedor, Fecha Instalación, Peso, PATH
- Solo lectura: No se pueden editar celdas
- Copiar celda: Clic derecho → "Copiar" copia el texto de la celda
- Selección múltiple: Checkbox en cada fila + checkbox "Seleccionar todo" en el header (solo afecta items visibles según filtro)
- Columna Versión: Template con icono coloreado (✅ verde, ❌ rojo,
⚠️ amarillo) + texto de versión - Filtros por nombre, versión, publicador (caja de búsqueda con placeholder "Buscar por nombre...")
- Filtros por estado: Todos, Actualizados, Desactualizados, No verificados (solo visibles en pestaña Instalado)
- Reordenamiento de columnas: Bloqueado para la columna 0 (checkbox) — siempre permanece primera
- Sección expandible debajo de las tablas principales con DataGrid de hotfixes
- Columnas: Hotfix ID, Fecha Instalación, Descripción, Caption, Instalado por
- Muestra las actualizaciones de Windows de los últimos 90 días
- Obtenido vía
Get-HotFixcon filtro por fecha
- Temas unificados en
Theme.xamlcon valores default (tema claro suave) - Cambio de tema en runtime vía
Set-WPFWindowTheme()que reemplaza losSolidColorBrushen el ResourceDictionary - Sigue el tema del sistema al iniciar (registro
AppsUseLightTheme)
- Fondo: #F3F3F3 (off-white, menos agresivo que blanco puro)
- Superficie: #E8E8E8
- Texto: #000000
- Acento: #0099CC
- Borde: #D0D0D0
- Fondo: #1E1E1E
- Superficie: #2D2D2D
- Texto: #FFFFFF
- Acento: #50E6FF
- Borde: #404040
- Windows 10/11
- PowerShell 5.1 o superior
- winget (para verificación de versiones)
- .NET Framework (para interfaz WPF)
Ejecutar como administrador recomendado:
.\FEN-AuditSW.ps1| Módulo | Descripción |
|---|---|
| Audit-System.ps1 | Audita Windows Features, Store Apps y Drivers con Publisher, Source, InstallDate, Size y PATH |
| Get-InstalledApps.ps1 | Obtiene apps instaladas del registro, clasifica en App/Component, busca PATH y fecha de último uso |
| Version-Check.ps1 | Verifica versiones usando winget con caché configurable (30 min) |
| Hotfixes.ps1 | Obtiene actualizaciones de Windows (hotfixes) de los últimos 90 días |
| Logging.ps1 | Sistema de registro de eventos con niveles Info/Warning/Error/Debug |
| Export.ps1 | Exportación a CSV con BOM UTF-8 para compatibilidad Excel |
| UI.ps1 | Interfaz gráfica WPF con filtros, temas, maximizado y copia de celdas |
- Se usa
DwmSetWindowAttribute(DWMWA_WINDOW_CORNER_PREFERENCE) para esquinas nativas WindowChromeelimina los bordes invisibles desiguales del sistema- El CornerRadius del Border WPF se sincroniza con DWM (8px normal, 0px maximizado)
- Toda la interfaz usa glyphs de Segoe MDL2 Assets (U+E000–U+EFFF)
- Los emojis se usan solo dentro de las celdas del DataGrid (✅ ❌
⚠️ en strings) - Los títulos de pestañas, botones y filtros usan glyphs equivalentes
- Funciones muertas eliminadas:
Get-SoftwareSize,Get-WindowsInfo,Format-HotfixTable,Initialize-Log,Export-ToCSV,Show-SaveDialog - Código duplicado eliminado:
$commonPaths(3→1), copy handlers (2→1), filter predicates (2→1) - Variables muertas eliminadas:
$progressBar,[Encoding]::Default - Catch blocks vacíos reemplazados con
Write-Debugdescriptivo Get-ItemProperty *reemplazado porGet-ChildItem+ por-subkey para evitar pérdida de datos- Filtro de PWAs (Chrome/Edge web apps) en el escaneo de registro
- Rutas
C:\Program Filesreemplazadas por variables de entorno
Los métodos de PATH se ejecutan secuencialmente SOLO para items sin ruta (sin overhead para el resto):
- Start Menu shortcuts — Escanea
*.lnken Inicio y resuelve el target víaWScript.Shell - MSI Products — Lee
HKLM:\...\Installer\ProductsmapeandoProductName→InstallLocation - Fuzzy directory — Coincidencia parcial por tokens del nombre en el índice de directorios
- .exe search — Busca ejecutables coincidentes en subdirectorios de Program Files (1 nivel)
- Agregado decodificador ROT-13 para nombres cifrados en UserAssist
- Eliminado fallback de Jump Lists que asignaba la misma fecha a todo el software
- Matching ahora compara contra nombres decodificados, no cifrados
- El maximizado se maneja manualmente: guarda el rectángulo normal, establece bounds al WorkArea
- Al restaurar se devuelve la posición y tamaño guardados
- Sin WindowChrome ni DWM en maximizado (esquinas cuadradas)