Gestión de servicios de Windows con Powershell

En la entrada de hoy voy a explicaros como podéis gestionar los servicios de un equipo con Windows en cualquiera de sus versiones mediante Powershell.

Gestión de los servicios

Obtener todos los servicios

La forma de obtener todos los servicios de una máquina Windows mediante Powershell es utilizando el siguiente comando:

PS C:\Users\sergio.portillo> get-service

Status   Name               DisplayName
------   ----               -----------
Stopped  AarSvc_28bec0e2    Agent Activation Runtime_28bec0e2
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Running  ApHidMonitorSer... Alps HID Monitor Service
Stopped  AppIDSvc           Application Identity
Running  Appinfo            Application Information
Running  AppMgmt            Application Management

Pero claro esto nos muestra todos los servicios independientemente del estado en el que se encuentren por lo que vamos a empezar a aplicar filtros para obtener por ejemplo los servicios que se encuentren actualmente parados.

Filtrar los resultados

Para obtener sólo los servicios que se encuentren parados tendremos que utilizar un nuevo argumento en el comando anterior que nos permitirá filtrar los resultados, este argumento será where-Object y es aquí donde le especificamos que sólo nos muestre un listado de aquellos servicios que se encuentren parados.

Nota: Si queréis obtener los que se encuentran en ejecución, como os imaginareis, será tan fácil por cambiar Stopped por Running.

PS C:\Users\sergio.portillo> get-service |
>> where-Object Status -eq 'Stopped'

Status   Name               DisplayName
------   ----               -----------
Stopped  AarSvc_28bec0e2    Agent Activation Runtime_28bec0e2
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
Stopped  AppReadiness       App Readiness
Stopped  AppVClient         Microsoft App-V Client

Dar formato a los resultados

Para dar formato a los resultados del ejemplo anterior para que en la consola sólo nos muestra los campos que necesitemos utilizaremos un nuevo argumento.

Para este ejemplo vamos a indicarle a la consulta que sólo nos muestre el nombre y el estado del servicio en ese orden.

PS C:\Users\sergio.portillo> get-service |
>> where-Object Status -eq 'Stopped' |
>> select-object Name,Status

Name                                         Status
----                                         ------
AarSvc_28bec0e2                             Stopped
AJRouter                                    Stopped
ALG                                         Stopped
AppIDSvc                                    Stopped
AppReadiness                                Stopped
AppVClient                                  Stopped
AssignedAccessManagerSvc                    Stopped
autotimesvc                                 Stopped
AxInstSV                                    Stopped

Exportar los datos a un fichero

Si necesitamos exportar la información anterior a un fichero CSV para tenerlo guardarlo por algún motivo o porque tenemos que compartirlo con otra persona lo podremos hacer de la siguiente forma.

Lo primero que tendremos que hacer es guardar la información resultante de la consulta anterior en una variable a la que llamaremos datos.

PS C:\Users\sergio.portillo> $datos = Get-Service |
>> Where-Object Status -eq 'Stopped' |
>> select-Object Name, Status

Si comprobáis el contenido de la variable datos veréis que contiene un listado con todos nuestros servicios que se encuentran parados.

PS C:\Users\sergio.portillo> $datos

Name                                         Status
----                                         ------
AarSvc_28bec0e2                             Stopped
AJRouter                                    Stopped
ALG                                         Stopped
AppIDSvc                                    Stopped
AppReadiness                                Stopped
AppVClient                                  Stopped
AppXSvc                                     Stopped
AssignedAccessManagerSvc                    Stopped
autotimesvc                                 Stopped

Almacenados los datos en una variable ya estaremos en posición de exportarlos a un fichero CSV.

PS C:\Users\sergio.portillo> $datos | Out-File .\servicios.csv

Y si probamos abrir el fichero con por ejemplo notepad.

PS C:\Users\sergio.portillo> notepad .\servicios.csv

Podemos ver como el fichero contiene todos los datos.

Pero claro habréis notado que este fichero no es un fichero CSV separado por comas y si nuestro objetivo es posteriormente importar en Excel todos los datos, estos nos aparecerán en una única columna y no en columnas separadas por lo que en este caso tendremos que hacer la exportación de otra forma:

PS C:\Users\sergio.portillo> $datos | Export-Csv .\servicios2.csv

Si ahora en vez de consultar el contenido con notepad como antes, que también podríamos hacerlo, lo vamos a hacer desde la misma consola de PowerShell.

PS C:\Users\sergio.portillo> Get-Content .\servicios2.csv | more
#TYPE Selected.System.ServiceProcess.ServiceController
"Name","Status"
"AarSvc_28bec0e2","Stopped"
"AJRouter","Stopped"
"ALG","Stopped"
"AppIDSvc","Stopped"
"AppReadiness","Stopped"
"AppVClient","Stopped"
"AppXSvc","Stopped"
"AssignedAccessManagerSvc","Stopped"
"autotimesvc","Stopped"
"AxInstSV","Stopped"
"BcastDVRUserService_28bec0e2","Stopped"
"BluetoothUserService_28bec0e2","Stopped"
"CaptureService_28bec0e2","Stopped"
"ClipSVC","Stopped"
"COMSysApp","Stopped"
"ConsentUxUserSvc_28bec0e2","Stopped"
"cphs","Stopped"
"CredentialEnrollmentManagerUserSvc_28bec0e2","Stopped"

Ahora si tenemos un ficheros CSV separados por comas el cual podremos importar perfectamente en Excel para trabajar con él.

Iniciar y detener servicios

Por último vamos a ver como podemos iniciar y detener servicios.

Detener servicios

En este ejemplo vamos a detener el servicio bits que como podemos comprobar se encuentra en ejecución.

PS C:\Users\sergio.portillo> get-service bits

Status   Name               DisplayName
------   ----               -----------
Running  bits               Background Intelligent Transfer Ser...


PS C:\Users\sergio.portillo> stop-service bits
PS C:\Users\sergio.portillo> get-service bits

Status   Name               DisplayName
------   ----               -----------
Stopped  bits               Background Intelligent Transfer Ser...

Iniciar servicios

Y ahora vamos a iniciarlo.

PS C:\Users\sergio.portillo> start-service bits
PS C:\Users\sergio.portillo> get-service bits

Status   Name               DisplayName
------   ----               -----------
Running  bits               Background Intelligent Transfer Ser...

Espero os haya sido de utilidad y mediante este tutorial aprendáis a gestionar servicios mediante Powershell.

Entradas relacionadas

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.