コマンドラインによるWindowsサービスの管理方法

Windowsサービス

私は、ターミナルから離れずにシステムタスクを管理する効率的な方法を常に探しています。Windowsを使用していても同様です。Windowsでは、サービスがバックグラウンドで動作し、システムやアプリケーションがスムーズに動作するようにしています。サービスマネージャを開く代わりに、コマンドラインからWindowsサービスを管理することを好みます。このガイドでは、これらの方法を見ていき、ターミナルから直接Windowsサービスを管理する方法を探ります。

1. sc.exeを使用してWindowsサービスを管理する

sc.exeは、Windowsサービスを管理するための組み込みコマンドラインツールです。ターミナルから直接サービスを構成、照会、制御できます。sc.exeを使用すると、グラフィカルなサービスマネージャーを必要とせずに、Windowsサービスを完全に制御できます。

scでのサービスステータスの確認

特定のサービスのステータスを確認するには、sc query serviceNameコマンドを使用します。たとえば、sc query MySQL80コマンドを実行してMySQL80サービスについての詳細、状態を取得します:

scでのサービスステータスの確認

現在、MySQLは当社のマシンで実行されていません。

scを使用してサービスを開始する

sc.exeを使用して特定のサービスを開始するには、sc start ServiceNameコマンドを使用できます。たとえば、sc start MySQL80を実行してMySQL80サービスを開始します。サービスが正常に開始されたかどうかを確認するには、sc query MySQL80コマンドを使用してそのステータスをチェックできます:

サービスを開始 Sc

scを使用してサービスを停止する

システムリソースを解放するためにサービスを停止できます。たとえば、sc stop MySQL80コマンドはMySQLを停止し、次にsc query MySQL80コマンドを使用して確認できます:

サービスを停止 Sc

scを使用して新しいサービスを作成する

sc createコマンドを使用して新しいサービスを作成できます。これにはサービス名、実行可能ファイルパス、起動タイプを指定する必要があります。たとえば、ブート時に自動的に開始される「mte」という新しいサービスを作成するには、次のように入力します:

sc create mte binPath="C:\Users\HP\Desktop\Examples\Service.exe" start= auto

scを使用してサービスを更新する

既存のサービスを構成するには、sc configコマンドを使用できます。たとえば、起動タイプを手動に変更するには、次のコマンドを実行します:

sc config serviceName start= demand

scを使用してサービスを削除する

もう必要ないサービスは、次のコマンドを使用してWindowsから永久に削除できます:

sc delete serviceName

2. Netコマンドを使用してWindowsサービスを管理する

Windowsのnetコマンドを使用すると、コマンドラインからサービスを管理できます。ユーザーがグラフィカルなサービスマネージャを使用せずにサービスを開始、停止、一時停止、再開、照会することができます。

netコマンドでサービスを開始および停止する

net start serviceNameおよびnet stop serviceNameコマンドを使用して、それぞれWindowsサービスを開始または停止できます:

netコマンドでサービスを開始または停止する

netコマンドでサービスを一時停止および再開する

一部のWindowsサービスは完全に停止するのではなく、一時停止および再開をサポートしています。その場合、net pause ServiceNameおよびnet continue ServiceNameコマンドを使用します:

netコマンドでサービスを一時停止および再開する

netコマンドでサービスステータスを確認する

netコマンド自体は特定のサービスのステータスを直接確認する手段を提供しませんが、findstrコマンドと組み合わせて結果をフィルタリングできます。たとえば、指定されたサービスが実行中かどうかを確認するには、次のように入力します:

net start | findstr "ServiceName"

指定されたサービスが実行中の場合、その名前が返されます。そうでない場合は出力はありません。

netコマンドを使用してリモートでサービスを管理する

リモートコンピューター上でサービスを管理するために、コンピュータ名を指定してnetコマンドを使用できます。たとえば、net start ServiceName /S RemotePCおよびnet stop ServiceName /S RemotePCコマンドを使用して、リモートコンピュータでサービスを開始または停止します。

3. PowerShell Cmdletsを使用してWindowsサービスを管理する

PowerShellは、Get-Service、Start-Service、Stop-Service、Restart-Serviceなどの組み込みcmdletを使用してWindowsサービスに対するより高度な制御を提供します。これらのcmdletを使用すると、サービスのステータスを確認したり、開始または停止したり、必要に応じて再起動したりできます。

PowerShellのcmdletは、サービスのステータス、表示名、依存サービスを含む詳細な出力を提供します。これにより、スクリプトや自動化が可能になり、複数のサービスを効率的に管理できます。

PowerShellの柔軟性と強力な機能は、Windowsサービスを管理する管理者のお気に入りのツールとなっています。

cmdletを使用してサービスステータスを取得する

Get-Service -Name ServiceName cmdletを使用して、指定されたサービスに関する詳細を取得できます。たとえば、次のコマンドはMySQL80サービスのステータスを返し、それが実行中か停止中かを示します:

Get-Service -Name MySQL80

サービスステータスを確認 Get-Service

PowerShell cmdletを使用してサービスを照会する

Get-Serviceコマンドを使用して、特定の基準に基づいてサービスを照会できます。たとえば、実行中のすべてのサービスを取得するには、次のコマンドを実行します:

Get-Service | Where-Object { $_.Status -eq 'Running' }

特定のサービスを照会

PowerShell cmdletを使用してサービスを開始および停止する

Start-ServiceおよびStop-Service cmdletを使用して、それぞれ特定のサービスを開始または停止できます。たとえば、PowerShellコマンドを使用してMySQL80サービスを開始、停止し、そのステータスを確認します:

Start-Service -Name MySQL80   
Stop-Service -Name MySQL80  
Get-Service -Name MySQL80

PowerShellでサービスを開始 停止

PowerShell cmdletを使用してサービスの起動タイプを変更する

PowerShell cmdletを使用すると、サービスの起動タイプを更新できます。たとえば、次のcmdletを実行して、サービスをシステムとともに自動的に開始、手動で起動する、または無効に設定します:

Set-Service -Name ServiceName -StartupType Automatic  
Set-Service -Name ServiceName -StartupType Manual  
Set-Service -Name ServiceName -StartupType Disabled

これらのcmdletは管理者がサービスの動作を効率的に管理し、必要に応じて重要なサービスが開始され、不要なサービスが実行されないようにします。

cmdletを使用してリモートサービスを管理する

PowerShellでは、リモートコンピューターの名前を指定してリモートコンピューター上のサービスを管理することもできます。たとえば、Get-Service -Name ServiceName -ComputerName RemotePCコマンドは、リモートコンピュータ名RemotePC上で実行されている特定のサービスのステータスを取得し、管理者がリモートでサービスを監視できるようにします。

同様に、Restart-Service -Name ServiceName -ComputerName serviceNameコマンドは、リモートコンピュータ上で指定されたサービスを再起動しようとします。この操作では、マシンに直接アクセスせずにサービスを再起動できます。ただし、リモートサービス管理には適切な権限とPowerShellリモーティングが有効になっている必要があります。

4. サービス管理タスクの自動化

PowerShellスクリプトを使用すると、サービス管理を自動化でき、手動介入なしでWindowsサービスを監視・制御しやすくなります。特定のサービスのステータスを常にチェックし、期待に反して停止した場合には再起動するスクリプトを作成できます。

たとえば、次のスクリプトはMySQL80サービスが実行中かどうかを確認し、停止している場合は再起動します:

$serviceName = "MySQL80"  
$service = Get-Service -Name $serviceName  
if ($service.Status -ne "Running") {  
    Restart-Service -Name $serviceName -Force  
    Write-Output "$serviceNameは停止しており、再起動されました。"  
} else {  
    Write-Output "$serviceNameはすでに実行中です。"  
}

デフォルトでは、Windowsはスクリプトの実行を制限しています。実行を有効にするには、最初に次のコマンドを実行します:

Set-ExecutionPolicy RemoteSigned

その後、スクリプトの場所に移動し、.\serviceScript.ps1コマンドを実行してスクリプトを実行します:

コマンドラインからWindowsサービスを管理すると、グラフィカルなサービスマネージャーに依存することなく完全な制御が得られます。sc.exe、net、またはPowerShell cmdletを使用するかにかかわらず、各方法はサービスを開始、停止、および構成する効率的な方法を提供します。

PowerShellのスクリプト機能により、自動化が容易になり、サービスをシームレスに監視および管理できます。これらのツールを習得することで、問題のトラブルシューティング、システムパフォーマンスの最適化、重要なサービスのスムーズな運用を確保できます。

Windowsシステムを最適化し、一般的な問題をトラブルシューティングする方法についてさらに詳しく知りたい場合は、これらのガイドをチェックして、Windowsの問題を修正し、PCをより良いパフォーマンスに最適化してください。