もくじ
📝 はじめに
現場で「不具合調査」をするときは、いきなり原因を決め打ちするよりも、
まずは状況を短時間で整理して、切り分けの入口を作るのが近道です。
そのために役立つのが、PowerShellでの定番コマンドです。
この記事では、「動作が重い」「フリーズする」「ネットが不安定」「突然再起動する」などの場面で
よく使われる調査用コマンド集を、用途別にまとめます。
コマンドはできるだけ短くコピペしやすい形から紹介します。
- 問い合わせ対応で、まず何を聞いて何を見ればよいか迷う
- 現場で時間がないので、定番コマンドだけ素早く打ちたい
- 原因が分からない状態で、手がかりを効率よく集めたい
- ログや情報をファイル化して、共有・記録したい
✅ このコマンド集でできること(要点)
✅ 不具合調査の基本の流れ(現場で迷わない順番)
原因が不明な不具合ほど、次の順で確認すると整理しやすいです。
- ① 起動状況(いつ起動したか/再起動しているか)
- ② 負荷状況(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/メモリの上位プロセスを見たい)
- 突然再起動した痕跡を確認したい(イベントログを見たい)
- 稼働状況をまとめて保存して共有したい(ログをファイル化したい)
