Windowsには数多くのサービス(バックグラウンドプロセス)が存在し、これらが正しく動作することでPCは安定して稼働します。
しかし、
「どのサービスが動いているのか?」
「特定のサービスは停止していないか?」
をGUIで確認するのは意外と面倒。
そこで登場するのが、PowerShellのGet-Service
コマンドです。
この記事では、Get-Service
の基本的な使い方から、特定のサービスの検索、状態別の絞り込み方法、応用的な活用例まで、初心者にもわかりやすく解説します!
Get-Serviceとは?基本機能とメリット

Get-Service
は、Windows上で動作している全サービスの情報を取得するためのPowerShellコマンドレットです。
主に以下の目的で使用されます:
- サービスの一覧取得
- サービスの状態確認(実行中/停止中など)
- サービス名や表示名でのフィルタ検索
- 状態ごとの分類や監視の自動化
GUIの「サービス」画面(services.msc)よりも素早くアクセスでき、スクリプトによる自動処理も可能です。
また、リモートコンピュータのサービス情報も取得できる点が大きなメリットです。
基本構文と実行例

基本構文
Get-Service
このコマンドを実行するだけで、コンピューター上のすべてのサービスが一覧表示されます。
出力例
Status Name DisplayName
------ ---- -----------
Running WinDefend Microsoft Defender Antivirus Service
Stopped WSearch Windows Search
Running Spooler Print Spooler
...
上記のように、サービスの状態(Status)、内部名(Name)、**表示名(DisplayName)**が一覧で表示されます。
状態(Status)の種類
- Running: 実行中
- Stopped: 停止中
- StartPending: 開始処理中
- StopPending: 停止処理中
- PausePending: 一時停止処理中
- ContinuePending: 再開処理中
サービス名・表示名での検索方法

内部名で検索(部分一致OK)
Get-Service -Name *audio*
この例では、名前に「audio」を含むすべてのサービスが表示されます(例:Audiosrv、AudioEndpointBuilderなど)。
複数のサービスを指定
Get-Service -Name BITS, Spooler, WinRM
カンマ区切りで複数のサービスを一度に指定できます。
表示名で検索(Where-Objectと組み合わせ)
Get-Service | Where-Object { $_.DisplayName -like "*Windows Update*" }
この例では、表示名に「Windows Update」を含むサービスが表示されます。
正確な表示名で検索
Get-Service | Where-Object { $_.DisplayName -eq "Print Spooler" }
どちらもワイルドカード(*
)を使ってあいまい検索できます。大文字小文字は区別されません。
状態別(Running/Stopped)に絞り込む方法

実行中のサービスだけ表示
Get-Service | Where-Object { $_.Status -eq "Running" }
-Statusパラメーターを使用
Get-Service -Status Running
こちらの方が簡潔に書けます。
停止しているサービスだけ表示
Get-Service -Status Stopped
自動起動設定のサービスで停止しているものを表示
Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped' }
これにより、稼働中・未稼働のサービスを明確に把握できます。
「自動」設定なのに停止しているサービスを見つけると、トラブルシューティングに役立ちます。
他のコマンドとの組み合わせ活用術

サービスの状態を名前とともに表示
Get-Service | Select-Object Name, Status
表形式できれいに表示
Get-Service | Format-Table -AutoSize
サービスを起動種別でグループ化して表示
Get-Service | Format-Table -GroupBy StartType
CSVファイルにエクスポート
Get-Service | Export-Csv -Path "C:\Services.csv" -NoTypeInformation
特定サービスの起動・停止状態をモニタリングスクリプトに応用
if ((Get-Service -Name "Spooler").Status -eq "Stopped") {
Start-Service -Name "Spooler"
Write-Output "Spoolerを再起動しました"
}
このように、Get-Service
は**Start-Service
やStop-Service
と組み合わせて自動制御**が可能です。
リモートコンピュータのサービス確認
Get-Service -ComputerName "Server01", "Server02"
複数のリモートコンピュータのサービス状態を一度に確認できます。
よくあるエラーと対処法
エラー内容 | 原因・対処法 |
---|---|
サービスが見つかりません | -Name で指定したサービス名が正しくない可能性。Get-Service だけで一覧を確認してから再実行しましょう。 |
アクセス拒否 | 管理者権限で PowerShell を実行していない場合。 「管理者として実行」してください。 |
リモートコンピュータに接続できない | ファイアウォール設定やリモート管理の有効化を確認。 また、リモート管理にはWSMan設定が必要な場合があります。 |
依存関係エラー | サービスの依存関係を確認する必要があります。まず依存サービスの状態を調査しましょう。 |
サービス名が不明な場合の対処法
# 部分的な名前やキーワードで検索
Get-Service | Where-Object { $_.DisplayName -like "*キーワード*" -or $_.Name -like "*キーワード*" }
実践的な活用例

特定のサービスが停止していたらメール通知
$criticalServices = "BITS", "Spooler", "WinDefend"
$stoppedServices = Get-Service -Name $criticalServices | Where-Object { $_.Status -eq "Stopped" }
if ($stoppedServices) {
$body = "以下の重要サービスが停止しています:`n"
foreach ($service in $stoppedServices) {
$body += "- $($service.DisplayName) ($($service.Name))`n"
}
Send-MailMessage -From "alert@example.com" -To "admin@example.com" -Subject "重要サービス停止アラート" -Body $body
}
サービスの自動再起動スクリプト
$servicesToMonitor = "Spooler", "BITS", "wuauserv"
foreach ($serviceName in $servicesToMonitor) {
$service = Get-Service -Name $serviceName
if ($service.Status -eq "Stopped") {
Write-Output "$(Get-Date) - サービス $($service.DisplayName) が停止しています。再起動を試みます。"
try {
Start-Service -Name $serviceName
Write-Output "$(Get-Date) - サービス $($service.DisplayName) の再起動に成功しました。"
}
catch {
Write-Output "$(Get-Date) - エラー: サービス $($service.DisplayName) の再起動に失敗しました。"
}
}
}
サービスの状態監視レポート作成
$report = @()
$services = Get-Service
foreach ($s in $services) {
$reportItem = [PSCustomObject]@{
ServiceName = $s.Name
DisplayName = $s.DisplayName
Status = $s.Status
StartType = $s.StartType
RunningTime = if ($s.Status -eq "Running") {
try { (Get-Date) - [System.Diagnostics.Process]::GetProcessById($s.Id).StartTime } catch { "不明" }
} else { "停止中" }
}
$report += $reportItem
}
$report | Export-Csv -Path "C:\ServiceReport_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
まとめ:管理作業に役立つGet-Serviceの使い方
Get-Service
は、PowerShellを活用するうえで非常に基本かつ強力なツールです。
Windowsのサービス状態を一覧で確認したり、自動処理に組み込んだりと、システム管理やトラブルシューティングにおいて欠かせない存在となります。
ポイントまとめ
Get-Service
で現在のサービス状態を即座に確認可能-Name
やWhere-Object
で柔軟に検索・抽出できる-ComputerName
でリモートコンピュータのサービスも管理Format-Table
やExport-Csv
と組み合わせてレポート作成Start-Service
やStop-Service
と連携して自動制御が可能- 監視スクリプトやシステム診断に組み込むことで自動化を実現
PowerShellの世界に慣れていく第一歩として、Get-Service
をぜひ使いこなしてみてください!
日常のシステム管理作業を効率化するだけでなく、トラブル発生時の原因特定にも役立ちます。
特にサーバー管理やITサポート業務では、このコマンドの活用が業務効率の向上につながるでしょう。
サービスの状態監視は、システムの安定稼働に不可欠な要素です。Get-Service
を駆使して、プロアクティブなシステム管理を実践しましょう!
コメント