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?

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:

⚠️ 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

Get-Service -ComputerName ACADEMY-ICL-DC
Get-Service -ComputerName ACADEMY-ICL-DC | Where-Object {$_.Status -eq "Running"}
Invoke-Command -ComputerName ACADEMY-ICL-DC,LOCALHOST -ScriptBlock {Get-Service -Name 'WinDefend'}

Invoke-Command permite correr ScriptBlocks en hosts locales o remotos, muy útil para administración masiva.