PowerShell を使用してサービスが実行されているかどうかを確認する

Salman Mehmood 2023年6月20日
PowerShell を使用してサービスが実行されているかどうかを確認する

この記事は、PowerShell スクリプトを使用して Windows サービスが現在実行されているかどうかを確認し、サービスが実行されていない場合はサービスをオンにする方法を示すことを目的としています。

PowerShell を使用してサービスが実行されているかどうかを確認する

サービスは、Microsoft Windows のコア コンポーネントの 1つとして、長時間実行されるプロセスをスムーズに作成および管理するために不可欠です。 コア実行におけるその重要性に基づいて、重要なシステムまたはカスタムメイドのサービスを継続的に監視し、それらの動作を追跡し、それらが実行されているかどうかを確認し、異常な措置が発生した場合は適切な措置を講じることができます。

存在する利用可能なすべてのサービスを出力するために使用される次のコマンドレットを検討してください。

sc queryex type=service state=all

これは、次の出力を示しています。

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

上記の出力から、多くのサービスが実行中および停止していることがわかります。 この膨大な数のサービスのリストの中に、異常な動作がないか追跡したり、実行中かどうかを確認したりする重要なサービスも存在します。

PowerShell スクリプトを使用してアクティビティを監視する方法を見てみましょう。

次のスニペットを検討してください。

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

上記のコードに見られるように、必要なサービスは PowerShell スクリプトを使用して簡単に追跡できます。

まず、サービスの名前が $serviceToTrack という名前の変数に格納されます。 その後、名前は -Name パラメーターとして Get-Service コマンドレットに渡されます。

Get-Service は、渡されたアクティビティに関する詳細情報を取得します。これには、名前やステータスが含まれますが、これらに限定されません。 私たちの場合、どちらも必要です。

サービスを取得した後、最近取得したサービスの Name および Status メンバーを使用してその名前とステータスを確認できます。これは主に、取得したサービスが実際に監視したいサービスであることを確認するために行われます。

サービスを開始する前に、サービスが実行されているかどうかを確認する必要があります。 ここでも status メンバーが使用されます。

Running に設定されている場合、サービスはすでにアクティブまたは実行中であり、開始する必要はありません。 一方、サービスが実行されていない場合は、Start-Service コマンドレットを使用して、開始するサービスの名前をパラメーターの 1つとして渡すことができます。

サービスが適切に開始され、実行されていることを確認するには、Start-Sleep コマンドレットを使用してしばらく待機する必要があり、スリープ時間が経過します。

十分な時間待った後、サービスのステータスを確認できます。 サービスを現在の状態に更新するには、Refresh() メソッドを使用してサービスの最新の状態を取得できます。

その後の簡単な比較チェックで、サービスが稼働しているかどうかを確認できます。

著者: Salman Mehmood
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

関連記事 - PowerShell Service