[登録されているタグ]

[記事公開日]2026/01/23

PowerShellで不具合調査に使う定番コマンド集|現場向けまとめ

📝 はじめに

現場で「不具合調査」をするときは、いきなり原因を決め打ちするよりも、
まずは状況を短時間で整理して、切り分けの入口を作るのが近道です。
そのために役立つのが、PowerShellでの定番コマンドです。

この記事では、「動作が重い」「フリーズする」「ネットが不安定」「突然再起動する」などの場面で
よく使われる調査用コマンド集を、用途別にまとめます。
コマンドはできるだけ短くコピペしやすい形から紹介します。

このまとめが役立つ場面

  • 問い合わせ対応で、まず何を聞いて何を見ればよいか迷う
  • 現場で時間がないので、定番コマンドだけ素早く打ちたい
  • 原因が分からない状態で、手がかりを効率よく集めたい
  • ログや情報をファイル化して、共有・記録したい

✅ このコマンド集でできること(要点)

  • OS/CPU/メモリ/ディスク/ネットワークの基本状態を素早く把握できる
  • エラー・警告・クラッシュの痕跡をイベントログから拾える
  • 重い原因(プロセス/メモリ消費)の入口を作れる
  • 結果を保存して「証拠」として共有しやすくできる
  • 状況整理→切り分けの順で進めやすくなる

✅ 不具合調査の基本の流れ(現場で迷わない順番)

原因が不明な不具合ほど、次の順で確認すると整理しやすいです。

  • ① 起動状況(いつ起動したか/再起動しているか)
  • ② 負荷状況(CPU/メモリが詰まっていないか)
  • ③ 直近ログ(Systemのエラー・警告)
  • ④ 目的別(ネット/ディスク/ドライバーなどの深掘り)
  • ⑤ 記録(結果をファイル化して共有・保管)

🧩 基本構文

Get-CimInstance
Get-Process
Get-WinEvent
Get-Service
Get-NetAdapter
Test-Connection

「システム情報(CIM)」「負荷(Process)」「ログ(WinEvent)」を中心に、
必要に応じてサービス・ネットワークへ広げていきます。

▶ 基本的な使い方(まずこれだけ)

🔹 ① 起動時刻(再起動されているか)を確認

Get-CimInstance Win32_OperatingSystem |
Select-Object CSName, LastBootUpTime

「再起動したつもりでもスリープ復帰だった」などのケースがあるため、
最終起動時刻は最初に押さえると役立ちます。

🔹 ② CPUを多く使っているプロセスを確認

Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10 Name, CPU

動作が重いときの入口です。上位に不自然なプロセスがいないか確認します。

🔹 ③ メモリを多く使っているプロセスを確認

Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 10 Name,
  @{Name="MemoryMB";Expression={[Math]::Round($_.WorkingSet/1MB,1)}}

メモリ圧迫が疑われるときの入口です。

🔹 ④ 直近のSystemログ(エラー/警告)を確認

Get-WinEvent -LogName System -MaxEvents 80 |
Where-Object { $_.LevelDisplayName -in @("Error","Warning") } |
Select-Object TimeCreated, LevelDisplayName, ProviderName, Id

「直近で何が起きているか」を短時間で掴めます。
ここで時刻が見えれば、前後の深掘りにつなげられます。

🛠 よく使われる指定例

🔹 OS/CPU/メモリ構成の“基本”を一気に確認

$os  = Get-CimInstance Win32_OperatingSystem
$cpu = Get-CimInstance Win32_Processor
$mem = Get-CimInstance Win32_PhysicalMemory

[PSCustomObject]@{
  PCName                 = $os.CSName
  OS                     = $os.Caption
  Build                  = $os.BuildNumber
  LastBootUpTime         = $os.LastBootUpTime
  CPU                    = $cpu.Name
  Cores                  = $cpu.NumberOfCores
  LogicalProcessors      = $cpu.NumberOfLogicalProcessors
  TotalMemoryGB          = [Math]::Round((($mem | Measure-Object Capacity -Sum).Sum)/1GB,1)
}

問い合わせ対応で「まず環境情報をまとめたい」場面で便利です。
表示されていれば取得自体はできています。

🔹 “急に落ちた/再起動した”痕跡を拾う(クラッシュ系)

Get-WinEvent -FilterHashtable @{
  LogName = "System"
  Id      = 41, 6008, 1001
} -MaxEvents 50 |
Select-Object TimeCreated, Id, ProviderName, Message

ブルースクリーンや強制再起動が疑われる場合の定番です。

🔹 サービスが止まっていないかを確認(停止中一覧)

Get-Service |
Where-Object { $_.Status -ne "Running" } |
Select-Object Status, Name, DisplayName

アプリが動かない・機能しない系で、サービス停止がないか確認する入口になります。

🔹 ネットワークの“生存確認”をする(疎通)

Test-Connection 8.8.8.8 -Count 4

「ネットにつながらない」ときに、まずIP疎通を確認します。
DNS問題の切り分けに進むかどうかの判断材料になります。

💼 実務でよく使う使用例(応用)

🔹 “不具合の時刻の前後”だけログを切り出す(調査が速くなる)

$t = Get-Date "2026-01-01 12:00:00"
Get-WinEvent -FilterHashtable @{
  LogName   = "System"
  StartTime = $t.AddMinutes(-20)
  EndTime   = $t.AddMinutes(20)
} |
Select-Object TimeCreated, LevelDisplayName, ProviderName, Id, Message

時刻が分かっている場合は、前後だけに絞ると“現場の速さ”が出ます。
出力が出ていれば、時刻指定は機能しています。

🔹 よく使う調査結果を1つのファイルに保存する

$out = "C:\logs\triage.txt"

"=== BASIC INFO ===" | Out-File $out
Get-CimInstance Win32_OperatingSystem | Select-Object CSName, Caption, Version, BuildNumber, LastBootUpTime | Out-File $out -Append

"=== TOP CPU ===" | Out-File $out -Append
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, CPU | Out-File $out -Append

"=== TOP MEMORY ===" | Out-File $out -Append
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10 Name, WorkingSet | Out-File $out -Append

"=== SYSTEM ERR/WARN ===" | Out-File $out -Append
Get-WinEvent -LogName System -MaxEvents 80 |
Where-Object { $_.LevelDisplayName -in @("Error","Warning") } |
Select-Object TimeCreated, LevelDisplayName, ProviderName, Id |
Out-File $out -Append

問い合わせ対応や社内共有で「調査ログを送ってください」と言われたときに便利です。
ただし、出力先フォルダは事前に作成しておくと安全です。

組み合わせ例

  • 重い → Get-Process(CPU/Memory上位)→ 直近ログ(System)
  • 突然再起動 → Get-WinEvent(41/6008/1001)→ 前後ログ切り出し
  • ネット不調 → Test-Connection → DNS切り分け(必要に応じて)

🧩 よくある勘違い・つまずきポイント

  • エラーがない=問題なし、とは限らない(性能不足や相性の可能性もある)
  • Get-Process のCPU値は「累積」のため、瞬間的な使用率とは違う
  • スリープ復帰だと「再起動したつもり」とズレる場合がある(LastBootUpTimeで確認)
  • ログが多い環境で後から絞ると遅い場合がある(可能ならFilterHashtableで絞る)
  • 保存先フォルダがなくてOut-Fileが失敗することがある
  • 仮想環境や管理制限のあるPCでは取得結果が変わる場合がある

⚠ エラー・うまく動かないときの確認ポイント

  • PowerShellを管理者として実行すべき環境ではないか
  • 取得件数が多すぎて処理が重くなっていないか(-MaxEvents で調整)
  • イベントログの対象(System / Application)が合っているか
  • 保存先フォルダ(例:C:\logs)が存在するか
  • セキュリティ製品やポリシーで取得が制限されていないか

🧠 注意点

ここで紹介したコマンドは「初動の状況整理」に強い一方で、
これだけで原因を断定できるとは限りません。
ただ、時刻・負荷・ログが揃うだけで、
次に何を疑うべきか(ドライバー、ストレージ、ネット、更新、アプリ)を
かなり整理しやすくなります。

📌 まとめ

  • まずは起動状況(LastBootUpTime)で前提を揃える
  • 次にCPU/メモリ上位プロセスで“今の重さ”を確認する
  • Systemログの直近エラー/警告で“何が起きたか”を拾う
  • 時刻が分かったら前後ログを切り出すと調査が速い
  • 結果はファイル化して共有すると現場が回りやすい

🔎 PowerShellコマンドを探す

  • ファイルを削除したい
  • 一覧を表示したい
  • 文字列を検索したい
  • 条件で絞り込みたい
  • エラーや実行できない原因を調べたい
  • 動作が重い原因を調べたい(CPU/メモリの上位プロセスを見たい)
  • 突然再起動した痕跡を確認したい(イベントログを見たい)
  • 稼働状況をまとめて保存して共有したい(ログをファイル化したい)
Generic filters
すべてを開く | すべてを閉じる

ページ上部へ戻る