Get-Service: información extendida de servicios Windows (Powershell)

El cmdlet de PowerShell Get-Service permite visualizar el listado de servicios que están tanto en ejecución como parados dentro de un sistema Windows, junto con la posibilidad de utilizar parámetros y filtros para afinar la búsqueda. Es interesante conocer este ejecutable ya que a través de la herramienta gráfica services.msc no está disponible toda la información de los servicios.

Vamos a ir al grano mostrando una serie de ejemplos útiles en el día a día.

Ejecución de get-service sin parámetros

PS C:\Users\Administrator> Get-Service

Status   Name               DisplayName
------   ----               -----------
Running  AeLookupSvc        Application Experience
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
Running  Appinfo            Application Information
Stopped  AppMgmt            Application Management
Stopped  AppReadiness       App Readiness
Stopped  AppXSvc            AppX Deployment Service (AppXSVC)
Stopped  AudioEndpointBu... Windows Audio Endpoint Builder
Stopped  Audiosrv           Windows Audio
Stopped  AxInstSV           ActiveX Installer (AxInstSV)
Running  BFE                Base Filtering Engine
Running  BITS               Background Intelligent Transfer Ser...
Running  BrokerInfrastru... Background Tasks Infrastructure Ser...
Stopped  Browser            Computer Browser
Running  CcmExec            SMS Agent Host
Running  CertPropSvc        Certificate Propagation
Stopped  CmRcService        Configuration Manager Remote Control
Running  COMSysApp          COM+ System Application
Running  CryptSvc           Cryptographic Services
Stopped  CscService         Offline Files
Running  DcomLaunch         DCOM Server Process Launcher
Stopped  defragsvc          Optimize drives
Stopped  DeviceAssociati... Device Association Service
Stopped  DeviceInstall      Device Install Service
Running  Dhcp               DHCP Client
[...}

Esto mostrará un listado de los servicios arrancados/parados del sistema local en orden alfabético.

Listado de servicios de un equipo remoto

PS C:\> Get-Service -Computername foo

Este ejemplo, al igual que el anterior, muestra un listado de los servicios en orden alfabético, pero de un sistema remoto con nombre de equipo foo.

También se puede consultar la información de varios equipos a la vez si los separamos con comas:

PS C:\> Get-Service -Computername foo,bar

Ordenar la salida por una de las columnas

Concatenando con pipes podemos ordenar la salida en función de una de las columnas:

PS C:\> get-service | sort-object status

Uso de expresiones regulares/comodines

Con el objetivo de filtrar el resultado, se pueden utilizar comodines y/o expresiones regulares:

PS C:\> get-service wmi*

También se pueden seleccionar los resultados que coincidan con un valor concreto en una de las columnas:

PS C:\> Get-Service -ComputerName foo -Name SERVICE01 | Get-Member -MemberType Properties

Usar condicionales para filtrar resultados

El siguiente ejemplo muestra únicamente los servicios cuyo estado es running (en ejecución):

PS C:\> Get-Service | Where {$_.Status -eq "Running"}

Un ejemplo algo más elaborado que, además especifica con un condicional que el nombre comienza por F:

PS C:\> Get-Service | where {($_.Name -like "F*")-and ($_.Status -eq "Running")}

Formato de salida

Concatenando con el comando format se puede especificar las columnas a mostrar, por ejemplo:

PS C:\> get-wmiobject FOO | where-object {$_.Name -eq 'BAR'} | format-list Name, Description

Consultar ayuda del servicio

Quizás el punto más importante. Para consultar la ayuda y visualizar ejemplos del CMDLET, ejecutad el comando:

PS C:\> Get-help Get-Service -full
PS C:\> Get-help Get-Service -example