Windowsシステムの運用管理において、サービスの管理は欠かすことのできない重要な業務の一つです。
特にアプリケーションの不具合や設定変更に伴うサービスの再起動は、日常的に発生する作業と言えるでしょう。
PowerShellには、これらの操作を効率化するための強力なコマンドレットである「Restart-Service」が用意されています。
本記事では、このコマンドの基本的な使い方から、実務で役立つ応用テクニックまでを詳しく解説します。
2026年現在のITインフラ運用においても、自動化や効率化の観点でPowerShellの習得は非常に価値があります。
基本的なサービス再起動コマンド「Restart-Service」
Windowsサービスを再起動する際、GUIの「サービス」管理ツール(services.msc)を使用するのが一般的かもしれません。
しかし、PowerShellを使用すれば、コマンド一行で素早く再起動を実行することが可能です。
最も基本的な使い方は、再起動したいサービスの名称を直接指定する方法です。
Restart-Serviceの基本構文
まずは、最もシンプルな構文を確認してみましょう。
# Print Spoolerサービスを再起動する
Restart-Service -Name "Spooler"
このコマンドを実行すると、指定したサービスが停止され、その後に自動的に開始されます。
実行時に特にメッセージが表示されない場合は、正常に処理が完了したことを意味します。
もし再起動の過程を視覚的に確認したい場合は、-PassThruパラメーターを付与すると良いでしょう。
# 実行結果を表示しながら再起動する
Restart-Service -Name "Spooler" -PassThru
Status Name DisplayName
------ ---- -----------
Running Spooler Print Spooler
サービス名の指定方法:NameとDisplayNameの違い
サービスを特定する識別子には、「サービス名(Name)」と「表示名(DisplayName)」の2種類があります。
-Nameパラメーターは、システム内部で使用される短い名称を指定する際に使用します。
一方で、管理ツールなどで表示される読みやすい名称を使いたい場合は、-DisplayNameパラメーターを使用します。
# 表示名を使って再起動する
Restart-Service -DisplayName "Print Spooler"
どちらを使用しても結果は同じですが、スクリプトを作成する際は、環境に左右されにくい「サービス名」を利用することが一般的です。
Restart-Serviceで利用できる主要なパラメーター
コマンドの機能をより深く理解するために、頻繁に利用されるパラメーターを一覧にまとめました。
| パラメーター | 説明 |
|---|---|
| -Name | 再起動するサービスのシステム名を指定します。 |
| -DisplayName | 再起動するサービスの表示名を指定します。 |
| -Force | 依存関係のあるサービスが存在する場合でも、強制的に再起動を実行します。 |
| -PassThru | 再起動されたサービスの状態を示すオブジェクトを返します。 |
| -Include / -Exclude | 特定の条件に合致するサービスを含めたり、除外したりします。 |
| -WhatIf | 実際にコマンドを実行せずに、実行した場合の結果を表示します。 |
| -Confirm | 実行前にユーザーに確認を求めます。 |
これらのパラメーターを組み合わせることで、複雑な運用要件にも柔軟に対応できるようになります。
実践的なサービス操作のバリエーション
実務では、単一のサービスを再起動するだけでなく、複数のサービスを扱ったり、特定の条件でフィルタリングしたりする場面が多いです。
複数のサービスを一括で再起動する
PowerShellでは、カンマ区切りで複数のサービス名を指定することで、一括処理が可能です。
# 複数のサービスを同時に再起動する
Restart-Service -Name "W32Time", "Spooler"
この手法は、関連する複数のマイクロサービスやアプリケーションを一度にリフレッシュしたい場合に非常に便利です。
ワイルドカードを利用した柔軟な指定
サービス名の一部しかわからない場合や、特定の接頭辞を持つサービスをすべて再起動したい場合には、ワイルドカードが役立ちます。
# "MSSQL"で始まるすべてのサービスを再起動する
Restart-Service -Name "MSSQL*"
ワイルドカードを使用する際は、意図しないサービスまで停止させてしまうリスクがあるため、事前に確認を行うことを推奨します。
そのような場面では、後述する-WhatIfパラメーターを併用して、どのサービスが対象になるかを確認すると安全です。
依存関係のあるサービスを考慮した再起動
一部のサービスは、他のサービスに依存して動作しています。
依存元のサービスを再起動しようとすると、通常はエラーが発生して停止します。
このような場合には、-Forceパラメーターを使用することで、依存するサービスも含めて再起動を強制できます。
# 依存関係を無視して強制的に再起動する
Restart-Service -Name "LanmanWorkstation" -Force
ただし、依存サービスが停止することによるシステムへの影響を十分に考慮した上で実行してください。
パイプラインを活用した高度な連携
PowerShellの最大の特長は、コマンド間でオブジェクトを受け渡す「パイプライン」機能です。
Get-Serviceコマンドレットと組み合わせることで、より詳細な制御が可能になります。
特定の状態のサービスのみを再起動する
例えば、「現在停止しているサービスだけを探して再起動する」といった処理が簡単に記述できます。
# 停止中のサービスを検索して再起動を試みる
Get-Service | Where-Object { $_.Status -eq "Stopped" } | Restart-Service
実用的な例としては、特定の名前を含み、かつ実行中のものだけを対象にするコードが挙げられます。
# "my-app"を含む実行中のサービスをすべて再起動する
Get-Service -Name "*my-app*" | Where-Object { $_.Status -eq "Running" } | Restart-Service
再起動が完了するまで待機する方法
Restart-Serviceは、再起動命令を送るとすぐに制御を戻しますが、サービスの起動には時間がかかる場合があります。
スクリプトの中で「完全に起動したことを確認してから次の処理へ進みたい」という場合は、Wait-Service(PowerShell 7以降)やループ処理を組み合わせます。
# 再起動後にStatusがRunningになるまでループで待機する
Restart-Service -Name "Spooler"
while ((Get-Service -Name "Spooler").Status -ne "Running") {
Start-Sleep -Seconds 1
}
Write-Host "サービスが正常に起動しました。"
トラブルシューティング:権限不足とエラー対処
サービス操作を実行する際、いくつかの典型的なエラーに遭遇することがあります。
管理者権限での実行
サービスの停止や開始はシステムに大きな影響を与えるため、管理者権限(特権)が必要です。
一般ユーザーの権限で実行すると、「アクセスが拒否されました」というエラーが表示されます。
必ずPowerShellコンソールを「管理者として実行」から起動していることを確認してください。
サービスのタイムアウト問題
サービスが正常に終了処理を行えない場合、再起動コマンドがタイムアウトすることがあります。
この場合、コマンド側でエラーが発生しますが、サービス自体は「停止中」や「停止保留中」のままフリーズしている可能性があります。
そのような状況では、プロセスを直接強制終了させる手法も検討されます。
# サービスが応答しない場合にプロセスIDを指定して強制終了する
$service = Get-Service -Name "ServiceName"
Stop-Process -Id $service.Id -Force
Start-Service -Name "ServiceName"
2026年現在の運用におけるベストプラクティス
現代のシステム運用では、ローカルPCだけでなく、リモートサーバーやクラウド上の仮想マシンを操作する機会が増えています。
リモートコンピュータでのサービス再起動
Invoke-Commandを使用すれば、ネットワーク越しに複数のサーバーのサービスを一斉に再起動できます。
# リモートサーバーに対してサービス再起動を実行する
Invoke-Command -ComputerName "Server01", "Server02" -ScriptBlock {
Restart-Service -Name "W3SVC"
}
この方法は、Webサーバーファームのメンテナンスなどで非常に高い効率を発揮します。
エラーハンドリングの実装
自動化スクリプトを作成する際は、不測の事態に備えてTry-Catch構文を導入することが推奨されます。
try {
# エラーが発生した際に例外を投げるように設定
Restart-Service -Name "NonExistentService" -ErrorAction Stop
}
catch {
Write-Error "サービスの再起動中にエラーが発生しました: $_"
}
-ErrorAction Stopを指定することで、エラー発生時に確実にcatchブロックへ処理を移すことができます。
まとめ
PowerShellのRestart-Serviceコマンドレットは、Windowsサービスの管理を劇的に効率化するツールです。
基本的なサービス指定から、パイプラインを用いた高度なフィルタリング、さらにはリモート操作まで、その活用範囲は多岐にわたります。
今回ご紹介した「-Forceによる依存関係の解決」や「Try-Catchによるエラー処理」を組み合わせることで、堅牢な運用スクリプトを作成できるようになります。
日々のルーチンワークをコマンド化し、人的ミスの削減と作業時間の短縮を目指しましょう。
まずは安全な環境で、-WhatIfパラメーターを使いながらコマンドの挙動に慣れることから始めてみてください。
正確な知識に基づいたPowerShellの活用は、インフラエンジニアとしてのスキルを一段高めてくれるはずです。
