サービスの管理
このサンプルは 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
コマンドレットで、サービスの Status、Name、RequiredServices、DependentServices の各プロパティを表示します。
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」をご覧ください
関連項目
PowerShell