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
- Agregar información en el campo Teléfonos/Notas de un Usuario de Active Directory con PowerShell
- PowerShell: Como importar usuarios en Active Directory desde un fichero CSV
- Exchange: Mostrar y ocultar contactos, usuarios y grupos de la libreta de direcciones GAL en Office 365 mediante PowerShell
- PowerShell: Como obtener los miembros de los grupos de distribución existentes en Office 365
- PowerShell: Notificación por correo electrónico a los usuarios del tiempo restante hasta la caducidad de su contraseña de dominio
- PowerShell: Como exportar a Excel usuarios de Active Directory
- Obtener información de certificados en Windows conociendo sólo su huella digital (thumbprint) mediante Powershell
Me dedico a la Administración de Sistemas y he creado este blog para compartir mis conocimientos con toda la comunidad y así aportar mi granito de arena y ayudar a todo el que lo necesite.