サービスの管理

このサンプルは Windows PowerShell 5.1 にのみ適用されます。

サービスに関連したさまざまなタスクを実行するために設計された 8 つの主要な Service コマンドレットがあります。 この記事では、サービスの実行状態の一覧表示と変更についてのみ説明します。 Get-Command *-Service を使うと、サービス コマンドレットの一覧を取得できます。 Get-Help <Cmdlet-Name> を使うと、Get-Help New-Service のように各コマンドレットに関する情報を確認できます。

サービスの取得

Get-Service コマンドレットを使用して、ローカル コンピューターまたはリモート コンピューター上のサービスを取得できます。 Get-Process と同様、パラメーターを指定せずに Get-Service コマンドを実行した場合、すべてのサービスが返されます。 アスタリスクをワイルドカードとして使用し、サービスを名前でフィルター処理するには、次のように入力します。

PS> Get-Service -Name se*

Status   Name               DisplayName
------   ----               -----------
Running  seclogon           Secondary Logon
Running  SENS               System Event Notification
Stopped  ServiceLayer       ServiceLayer

サービスの実際の名前がわかるとは限らないため、表示名でサービスを検索しなければならない場合もあります。 具体的な名前を指定して検索する、ワイルドカードを使う、または表示名の一覧を表示することができます。

PS> Get-Service -DisplayName se*

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Running  SamSs              Security Accounts Manager
Running  seclogon           Secondary Logon
Stopped  ServiceLayer       ServiceLayer
Running  wscsvc             Security Center

PS> Get-Service -DisplayName ServiceLayer, Server

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Stopped  ServiceLayer       ServiceLayer

リモート サービスの取得

Windows PowerShell の場合は、Get-Service コマンドレットの ComputerName パラメーターを使用して、リモート コンピューター上のサービスを取得できます。 ComputerName パラメーターには複数の値およびワイルドカード文字を使用できるため、1 つのコマンドで複数のコンピューター上のサービスを取得できます。 たとえば、次のコマンドでは、Server01 リモート コンピューター上のサービスを取得できます。

Get-Service -ComputerName Server01

PowerShell 6.0 以降、*-Service コマンドレットには ComputerName パラメーターがありません。 PowerShell リモート処理を使用してリモート コンピューターでサービスを引き続き取得できます。 たとえば、次のコマンドでは、Server02 リモート コンピューター上のサービスを取得できます。

Invoke-Command -ComputerName Server02 -ScriptBlock { Get-Service }

他の *-Service のコマンドレットを使用してサービスを管理することもできます。 PowerShell リモート処理の詳細については、about_Remote に関するページを参照してください。

必要なサービスと依存するサービスの取得

Get-Service コマンドレットには、サービスの管理に非常に便利な 2 つのパラメーターがあります。 DependentServices パラメーターは、そのサービスに依存するサービスを取得します。

RequiredServices パラメーターを使うと、LanmanWorkstation サービスが依存しているサービスを取得できます。

PS> Get-Service -Name LanmanWorkstation -RequiredServices

Status   Name               DisplayName
------   ----               -----------
Running  MRxSmb20           SMB 2.0 MiniRedirector
Running  bowser             Bowser
Running  MRxSmb10           SMB 1.x MiniRedirector
Running  NSI                Network Store Interface Service

DependentServices パラメーターを使うと、LanmanWorkstation サービスを必要とするものを取得できます。

PS> Get-Service -Name LanmanWorkstation -DependentServices

Status   Name               DisplayName
------   ----               -----------
Running  SessionEnv         Terminal Services Configuration
Running  Netlogon           Netlogon
Stopped  Browser            Computer Browser
Running  BITS               Background Intelligent Transfer Ser...

次のコマンドを使うと、依存関係のあるすべてのサービスを取得できます。 Format-Table コマンドレットで、サービスの StatusNameRequiredServicesDependentServices の各プロパティを表示します。

Get-Service -Name * | Where-Object {$_.RequiredServices -or $_.DependentServices} |
  Format-Table -Property Status, Name, RequiredServices, DependentServices -auto

サービスの停止、開始、一時停止、再開

サービスを扱うすべてのコマンドレットは、同じ形式で指定できます。 サービスを一般的な名前 (表示名) で指定できるほか、表示名の一覧を指定したり、ワイルドカードを値として使用したりすることもできます。 印刷スプーラーを停止するには、次のように入力します。

Stop-Service -Name spooler

停止した印刷スプーラーを開始するには、次のように入力します。

Start-Service -Name spooler

印刷スプーラーを一時停止するには、次のように入力します。

Suspend-Service -Name spooler

Restart-Service コマンドレットは、他の Service コマンドレットと同じように機能します。

PS> Restart-Service -Name spooler

WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
PS>

印刷スプーラーの起動に関して、警告メッセージが繰り返し出力されていることがわかります。 ある程度時間のかかるサービス操作を実行すると、タスクの実行を試みている最中であることが PowerShell から通知されます。

複数のサービスを再開する場合は、サービスの一覧を取得してからフィルターを適用し、その上でサービスを再開するようにします。

PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service

WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : can't stop service 'Logical Disk Manager (dmserver)' because
 it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...

サービスを扱うこれらのコマンドレットには ComputerName パラメーターはありませんが、Invoke-Command コマンドレットを使用すれば、これらのコマンドレットをリモート コンピューター上で実行できます。 たとえば、次のコマンドでは、Server01 リモート コンピューター上のスプーラー サービスを再起動できます。

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

サービスのプロパティの設定

Set-Service コマンドレットは、ローカル コンピューターまたはリモート コンピューター上のサービスのプロパティを変更します。 サービスの状態もプロパティの 1 つであるため、このコマンドレットを使用してサービスを開始、停止、一時停止できます。 Set-Service コマンドレットには、サービスのスタートアップの種類を変更できる StartupType パラメーターもあります。

Windows Vista 以降のバージョンの Windows 上で Set-Service を使用するには、PowerShell を開く際に [管理者として実行] オプションを指定する必要があります。

詳細については、「Set-Service」をご覧ください

関連項目