Trabajando con Servicios – PowerShell
En la sección anterior hablamos sobre filtrar y usar pipelines para encontrar servicios desde la perspectiva de un pentester. Ahora lo abordaremos desde la perspectiva de un administrador.
📌 Escenario
El Sr. Tanaka reporta que apareció una ventana antes en el día (posiblemente actualizaciones de Windows), pero ahora recibe alertas indicando que Defender está desactivado y el equipo funciona lento. Necesitamos investigar qué servicios relacionados con Defender están apagados y habilitarlos si es posible.
🧩 ¿Qué son los servicios y cómo interactuar con ellos en PowerShell?
-
Servicios: Instancias en segundo plano que gestionan procesos y componentes necesarios para aplicaciones en Windows.
-
No requieren interacción del usuario ni tienen interfaz visible.
-
Cada servicio puede tener múltiples procesos, pero como servicio existe solo una instancia en el host.
-
Categorías: Local Services, Network Services, System Services.
PowerShell ofrece el módulo Microsoft.PowerShell.Management con cmdlets para consultar, iniciar, detener y modificar servicios.
🆘 Obtener ayuda sobre servicios
Get-Help *-Service
Esto mostrará cmdlets como:
-
Get-Service→ Consultar servicios -
Start-Service→ Iniciar servicio -
Stop-Service→ Detener servicio -
Set-Service→ Cambiar configuración -
Restart-Service→ Reiniciar servicio
⚠️ Para modificar servicios, necesitas permisos de administrador.
🔍 Investigando servicios en ejecución
# Listar todos los servicios con nombre y estado
Get-Service | Format-Table DisplayName,Status
# Contar todos los servicios
Get-Service | Measure-Object
Ejemplo: 321 servicios en ejecución, demasiados para revisar uno a uno.
🛡 Filtrando servicios relacionados con Defender
Get-Service | Where-Object DisplayName -like '*Defender*' | Format-Table DisplayName,ServiceName,Status
Resultado típico:
| DisplayName | ServiceName | Status |
|---|---|---|
| Windows Defender Firewall | mpssvc | Running |
| Windows Defender Advanced Threat Protection | Sense | Stopped |
| Microsoft Defender Antivirus Network Inspection | WdNisSvc | Running |
| Microsoft Defender Antivirus Service | WinDefend | Stopped |
Podemos ver que WinDefend está detenido y necesita ser iniciado.
▶️ Iniciar un servicio
Start-Service WinDefend
# Verificar estado
Get-Service WinDefend
⏹ Detener un servicio
Stop-Service Spooler
# Verificar
Get-Service Spooler | Select-Object Name,StartType,Status,DisplayName
⚙️ Modificar tipo de inicio de un servicio
Set-Service -Name Spooler -StartType Disabled
# Verificar cambio
Get-Service -Name Spooler | Select-Object StartType
Esto deshabilita temporalmente el servicio hasta que se investigue.
🌐 Interactuando con servicios remotos
-
Cmdlet:
-ComputerName -
Podemos consultar servicios en hosts remotos:
Get-Service -ComputerName ACADEMY-ICL-DC
- Filtrar servicios en ejecución:
Get-Service -ComputerName ACADEMY-ICL-DC | Where-Object {$_.Status -eq "Running"}
- Ejecutar comandos remotos en múltiples hosts:
Invoke-Command -ComputerName ACADEMY-ICL-DC,LOCALHOST -ScriptBlock {Get-Service -Name 'WinDefend'}
Invoke-Commandpermite correr ScriptBlocks en hosts locales o remotos, muy útil para administración masiva.