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()
メソッドを使用してサービスの最新の状態を取得できます。
その後の簡単な比較チェックで、サービスが稼働しているかどうかを確認できます。
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