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.
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