【初心者必見】PowerShellのGet-Serviceコマンド徹底解説|サービス一覧の取得・状態確認・実践例まで

Windows

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-ServiceStop-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で現在のサービス状態を即座に確認可能
  • -NameWhere-Objectで柔軟に検索・抽出できる
  • -ComputerNameでリモートコンピュータのサービスも管理
  • Format-TableExport-Csvと組み合わせてレポート作成
  • Start-ServiceStop-Serviceと連携して自動制御が可能
  • 監視スクリプトやシステム診断に組み込むことで自動化を実現

PowerShellの世界に慣れていく第一歩として、Get-Serviceをぜひ使いこなしてみてください!

日常のシステム管理作業を効率化するだけでなく、トラブル発生時の原因特定にも役立ちます。

特にサーバー管理やITサポート業務では、このコマンドの活用が業務効率の向上につながるでしょう。

サービスの状態監視は、システムの安定稼働に不可欠な要素です。
Get-Serviceを駆使して、プロアクティブなシステム管理を実践しましょう!

コメント

タイトルとURLをコピーしました