Administrar Servicios de Windows mediante PowerShell
Administrar Servicios de Windows mediante PowerShell

Cómo Administrar los Servicios de Windows con PowerShell

¿Eres un administrador de Windows que maneja los Servicios de Windows como parte de tu trabajo diario? Este artículo es para ti, ya que te mostramos cómo puedes gestionar estos servicios utilizando PowerShell. Pero antes de eso, vamos a tocar los fundamentos.

¿Qué son los Servicios de Windows?

Los servicios de Windows son programas informáticos que se ejecutan en segundo plano y son ideales para ejecutar aplicaciones ejecutables en sus propias sesiones de Windows. Una característica clave de estos servicios es que no suelen tener una interfaz de usuario, pero se pueden iniciar, detener, pausar o reiniciar en cualquier momento.

Concepto de servicios de Windows
Concepto de servicios de Windows

A menudo esto se hace a través de código en C# como parte de otra aplicación cuando se quiere que ciertos servicios se inicien o se detengan en determinados momentos o tras la ocurrencia de eventos o disparadores específicos.

También puedes abrir el Administrador de Servicios de Windows para iniciar y detener los servicios manualmente.

Como tercera opción, puedes utilizar PowerShell para manejar los servicios de Windows. Esto es fácil si conoces PowerShell, ya que hay muchos cmdlets para iniciar y detener estos servicios.

En este artículo, discutiremos la tercera opción, que es usar los cmdlets de PowerShell para manejar los Servicios de Windows.

Uso de PowerShell para administrar los servicios de Windows

PowerShell ofrece ocho cmdlets para administrar los Servicios de Windows. Son los siguientes.

Get-Service

Si utilizas Get-Service sin ningún parámetro, muestra todos los servicios que se están ejecutando en tu ordenador. También puedes buscar servicios específicos usando el nombre completo o comodines. También puedes utilizar múltiples palabras clave de búsqueda.

Aquí hay un fragmento de código que utiliza un simple comodín.

Get-Service -DisplayName se*
Ejemplo del cmdlet Get-Service
Ejemplo del cmdlet Get-Service

El cmdlet Get-Service muestra el estado, el nombre y el nombre de visualización de cada proceso en el sistema, incluidos los detenidos y suspendidos. También puedes filtrar los procesos en función de su estado, como en ejecución, detenido y suspendido. También es posible cambiar el formato de visualización cuando sea necesario.

Lo más destacado de este cmdlet es su capacidad de ordenación avanzada. Además de utilizar el comodín asterisco, puedes utilizar los siguientes operadores de comparación para encontrar el proceso que desees.

  • Lt: (Less than) Menor que
  • Gt: (Greater than) Mayor que
  • Le: (Less than or equal to) Menor o igual que
  • Ge: (Greater than or equal to) Mayor o igual que
  • Eq: (Equal to) Igual a
  • Ne: (Not equal to) No igual a
  • Like: Similar al comodín, pero se puede utilizar para la coincidencia de patrones
  • Match: Coincide con la expresión regular exacta
  • Contains: Encuentra los procesos que contienen una palabra o frase específica. Devuelve un booleano true o false
  • Replace: Cambia las partes específicas de un parámetro

Además de las capacidades de búsqueda avanzada, este cmdlet también tiene dos parámetros importantes para identificar las dependencias. El parámetro DependentServices muestra los servicios que dependen de un servicio concreto, mientras que el parámetro RequiredServices muestra la lista de servicios de los que depende un proceso específico.

Otra flexibilidad de este cmdlet es que puede canalizar los resultados a un archivo u otras aplicaciones o fragmentos de código para su posterior procesamiento. Por ejemplo, puedes utilizar el cmdlet Out-File para redirigir y guardar la salida en un archivo de texto. Esto puede resultar útil para el registro y el análisis. Estas medidas también pueden ayudar a cumplir la normativa.

Todos estos aspectos hacen que Get-Service sea potente, y por lo tanto es uno de los cmdlets más utilizados para administrar los Servicios de Windows y para saber más sobre lo que se está ejecutando en tu sistema local.

Stop-Service y Start-Service

Como su nombre indica, el cmdlet Stop-Service detiene un determinado servicio de Windows.

Stop-Service -Name Netlogon

Date cuenta de que algunos servicios críticos de Windows no pueden ser detenidos, y para saber cuáles son estos servicios críticos, utiliza el siguiente fragmento de código.

Get-Service | Where-Object {$_.CanStop -eq $false}

Este código muestra una lista de servicios que no se pueden detener para que puedas modificar tu plan en consecuencia.

A continuación, puedes iniciar cualquier servicio manualmente a través del cmdlet Start-Service PowerShell.

Start-Service -Name Netlogon

Estos dos cmdlets resultan útiles cuando se desea detener e iniciar servicios específicos mientras se ejecuta una aplicación. También pueden formar parte de un script más amplio.

Suspend-Service y Restart-Service

El cmdlet Suspend-Service suspende un servicio en ejecución. Esto es muy útil cuando se quiere comprobar el rendimiento de determinados servicios o se desea mantenerlos temporalmente fuera de servicio para recuperar recursos para otras tareas importantes.

Suspend-Service -Name Netlogon

Ten en cuenta que cuando un proceso se suspende, sigue funcionando, pero su acción se detiene. Esta es la diferencia clave entre suspender y detener.

Y para iniciarlos de nuevo, puedes utilizar el cmdlet Restart-Service, y hace algo más que reiniciar un servicio suspendido.

Puedes utilizarlo de forma efectiva para reiniciar varios servicios. También puedes utilizar este comando junto con el cmdlet Invoke-Command para reiniciar servicios desde un equipo remoto

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

La ventaja del cmdlet Restart-Service es que envía notificaciones hasta que se reinicie dicho servicio. De esta manera, también puedes estar al tanto de los retrasos y problemas.

Set-Service

El cmdlet Set-Service ayuda a cambiar las propiedades de un servicio. Además de iniciar, detener y suspender servicios, es posible cambiar el tipo de inicio, las credenciales, la descripción y el nombre de visualización de un servicio.

Con este cmdlet, puedes enviar el nombre o el objeto del servicio directamente o a través de un pipeline.

Set-Service -Name NetLogon -DisplayName "Net Logging Service"

New-Service

Este cmdlet se utiliza para crear un nuevo servicio de Windows.

Toma el archivo ejecutable para el servicio como parámetro y utiliza sus entradas para crear una nueva entrada en el registro y la base de datos. Puedes utilizar este cmdlet para establecer el nombre, la descripción, el tipo de inicio y las dependencias del nuevo servicio.

$params = @{
Name = "TestService"
BinaryPathName = '"C:\WINDOWS\System32\svchost.exe -k netsvcs"'
DependsOn = "NetLogon"
DisplayName = "Test Service"
StartupType = "Manual"
Description = "Este es un servicio de prueba."
}
New-Service @params

También puedes establecer el SecurityDescriptor del servicio con el cmdlet New-Service. Recuerda que este valor siempre se almacena en la variable $SSDLToSet.

Remove-Service

Como su nombre indica, este cmdlet elimina un servicio del equipo local. También elimina la entrada correspondiente del registro y de la base de datos.

Este servicio sólo está disponible a partir de PowerShell 6.0.

Se puede eliminar un servicio con su nombre o con su nombre de visualización.

Remove-Service -Name "TestService"
Get-Service -DisplayName "Test Service" | Remove-Service

Si deseas una confirmación antes de eliminar un servicio, añade el parámetro -Confirm al cmdlet.

Ten en cuenta que los cmdlets New-Service y Remove-Service sólo funcionan en la plataforma Windows.

Por lo tanto, estos son los diferentes cmdlets de PowerShell para administrar los servicios de Windows.

Reflexiones Finales

Los servicios de Windows son programas que se ejecutan en segundo plano. Mientras que algunos son críticos y no pueden detenerse, puedes iniciar, detener, reanudar y suspender el resto en cualquier momento. Asimismo, puedes crear un nuevo servicio o eliminar el existente. También puedes obtener información de los procesos o puedes utilizarlos para establecer valores específicos para cada uno.

En general, estos cmdlets son una forma sencilla de gestionar los Servicios de Windows y pueden resultar útiles para integrar estas acciones con programas personalizados y su respectivo código.

My Cart Close (×)

Tu carrito está vacío
Ver tienda