Überprüfen Sie, ob ein Dienst mit PowerShell ausgeführt wird

Salman Mehmood 20 Juni 2023
Überprüfen Sie, ob ein Dienst mit PowerShell ausgeführt wird

Dieser Artikel soll zeigen, wie Sie mithilfe von PowerShell-Skripting feststellen können, ob ein Windows-Dienst derzeit ausgeführt wird oder nicht. Wenn der Dienst nicht ausgeführt wird, schalten Sie den Dienst ein.

Überprüfen Sie, ob ein Dienst mit PowerShell ausgeführt wird

Als eine der Kernkomponenten von Microsoft Windows sind Services von entscheidender Bedeutung, um sicherzustellen, dass lang andauernde Prozesse reibungslos erstellt und verwaltet werden. Aufgrund ihrer Bedeutung für die Kernausführung kann es sinnvoll sein, kritische Systeme oder maßgeschneiderte Dienste kontinuierlich zu überwachen, ihr Verhalten zu verfolgen, zu überprüfen, ob sie ausgeführt werden, und geeignete Maßnahmen zu ergreifen, wenn anormale Maßnahmen auftreten.

Betrachten Sie das folgende Cmdlet, das verwendet wird, um alle verfügbaren verfügbaren Dienste zu drucken:

sc queryex type=service state=all

Dies zeigt die folgende Ausgabe:

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

Aus der obigen Ausgabe ist ersichtlich, dass viele Dienste ausgeführt und gestoppt werden. Unter dieser großen Liste von Diensten wird auch unser wichtiger Dienst vorhanden sein, den wir auf abnormales Verhalten verfolgen oder sehen möchten, ob er ausgeführt wird.

Sehen wir uns an, wie wir unsere Aktivitäten mit PowerShell-Skripting überwachen können.

Betrachten Sie den folgenden Ausschnitt:

# 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"
    }
}

Wie im obigen Code zu sehen ist, kann jeder gewünschte Dienst einfach per PowerShell-Skripting nachverfolgt werden.

Zuerst wird der Name des Dienstes in der Variablen namens $serviceToTrack gespeichert. Danach wird der Name als Parameter -Name an das Cmdlet Get-Service übergeben.

Der Get-Service ruft detaillierte Informationen über die an ihn übergebene Aktivität ab, einschließlich, aber nicht beschränkt auf Name und Status. Beides ist in unserem Fall erforderlich.

Nachdem wir den Dienst erworben haben, können wir seinen Namen und Status mithilfe der Elemente Name und Status des kürzlich abgerufenen Dienstes überprüfen, was hauptsächlich geschieht, um zu bestätigen, dass der von uns abgerufene Dienst tatsächlich der ist, den wir überwachen möchten.

Vor dem Start des Dienstes muss überprüft werden, ob der Dienst läuft. Auch hier wird wieder der Status Member verwendet.

Steht er auf Running, ist der Dienst bereits aktiv bzw. läuft und muss nicht gestartet werden. Wenn der Dienst andererseits nicht ausgeführt wird, können wir das Cmdlet Start-Service verwenden und den Namen des zu startenden Dienstes als einen seiner Parameter übergeben.

Um sicherzustellen, dass der Dienst ordnungsgemäß gestartet und ausgeführt wird, müssen wir mit dem Cmdlet Start-Sleep einige Zeit warten, bis die Zeit zum Schlafen verstrichen ist.

Nachdem wir genügend Zeit gewartet haben, können wir den Status des Dienstes überprüfen. Um den Dienst auf seinen aktuellen Zustand zu aktualisieren, können wir die Methode Refresh() verwenden, um den neuesten Zustand des Dienstes abzurufen.

Eine einfache Vergleichsprüfung danach kann bestätigen, ob der Dienst ausgeführt wird oder nicht.

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

Verwandter Artikel - PowerShell Service