Comprobar si un servicio se está ejecutando mediante PowerShell

Salman Mehmood 20 junio 2023
Comprobar si un servicio se está ejecutando mediante PowerShell

Este artículo tiene como objetivo demostrar cómo ver si un servicio de Windows se está ejecutando actualmente o no utilizando secuencias de comandos de PowerShell y, si el servicio no se está ejecutando, enciéndalo.

Comprobar si un servicio se está ejecutando mediante PowerShell

Como uno de los componentes centrales de Microsoft Windows, los servicios son vitales para garantizar que los procesos de ejecución prolongada se creen y administren sin problemas. En función de su importancia en la ejecución central, es posible que desee monitorear continuamente los sistemas críticos o los servicios personalizados, realizar un seguimiento de su comportamiento, verificar si se están ejecutando y tomar las medidas adecuadas si se encuentra alguna medida anormal.

Considere el siguiente cmdlet utilizado para imprimir todos los servicios disponibles presentes:

sc queryex type=service state=all

Esto muestra el siguiente resultado:

.
.
< Output Redacted >
.
SERVICE_NAME: AJRouter
DISPLAY_NAME: AllJoyn Router Service
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :

SERVICE_NAME: ALG
DISPLAY_NAME: Application Layer Gateway Service
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :

SERVICE_NAME: ApHidMonitorService
DISPLAY_NAME: AlpsAlpine HID Monitor Service
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 4464
        FLAGS              :
.
.
.
< Output Redacted >

En el resultado anterior, se puede ver que muchos servicios se están ejecutando y detenidos. Entre esta gran lista de servicios, también estará presente nuestro importante servicio, del cual queremos realizar un seguimiento para detectar cualquier comportamiento anormal o para ver si se está ejecutando.

Veamos cómo podemos monitorear nuestra actividad usando secuencias de comandos de PowerShell.

Considere el siguiente fragmento:

# Declare a variable for storing the service's name and store the service's name
$serviceToTrack = "AJRouter"

# Get the status of the service
$service = Get-Service -Name $serviceToTrack
$serviceName = $service.Name
$serviceStatus = $service.Status

# Print the name and status of the service to be monitored
Write-Host  Service Name:  $serviceName Status:  $serviceStatus

# Check if the service is running or not
# The code block is skipped in case the service is already running
if ($serviceStatus -ne "Running")
{
    Write-Host "$ServiceName is not running!"

    # Start the service using Start-Service
    Start-Service $ServiceName
    Write-Host "Starting $serviceName...."

    # Wait for 10 seconds to allow the service to properly start-up
    Start-Sleep -seconds 10

    # Refresh the service details to renew service details stored in $service
    $service.Refresh()

    # Check if the service is running
    if ($service.Status -eq 'Running')
    {
        # Print out the service running message if the service has started
        Write-Host "$serviceName is now Running"
    }
}

Como se ve en el código anterior, cualquier servicio deseado se puede rastrear fácilmente a través de secuencias de comandos de PowerShell.

Primero, el nombre del servicio se almacena en la variable denominada $serviceToTrack. Después de lo cual, el nombre se pasa al cmdlet Get-Service como un parámetro -Name.

El Get-Service obtiene información detallada sobre la actividad que se le pasó, incluidos, entre otros, su nombre y estado. Ambos son necesarios en nuestro caso.

Después de adquirir el servicio, podemos verificar su nombre y estado utilizando los miembros Nombre y Estado del servicio obtenido recientemente, hecho principalmente para confirmar que el servicio que buscamos es realmente el que queremos monitorear.

Antes de iniciar el servicio, es necesario verificar si el servicio se está ejecutando. Una vez más, aquí se utiliza el miembro de estado.

Si está configurado en En ejecución, el servicio ya está activo o en ejecución y no es necesario iniciarlo. Por otro lado, si el servicio no se está ejecutando, podemos utilizar el cmdlet Start-Service, pasando como uno de sus parámetros el nombre del servicio a iniciar.

Para asegurarnos de que el servicio está correctamente iniciado y funcionando, debemos esperar un tiempo, utilizando el cmdlet Start-Sleep, y transcurrió el tiempo de reposo.

Después de haber esperado el tiempo suficiente, podemos comprobar el estado del servicio. Para actualizar el servicio a su estado actual, podemos usar el método Refresh() para obtener el último estado del servicio.

Una simple verificación de comparación después de eso puede confirmar si el servicio se está ejecutando o no.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - PowerShell Service