PowerShellを使ってシステムのCPUとRAMをモニタリングする方法

PowerShellを使ってシステムのCPUとRAMをモニタリングする方法という問いには、言語非依存のCIMクラスでCPU負荷とメモリ量を採り、Get-Counterを使う場合はListSetから実機の名称を発見するという方法で答えます。Get-Counterのカウンターセット名とパスはWindowsの表示言語でローカライズされる。固定した英語のProcessorやMemory文字列を全端末へ配ると日本語環境などで失敗し得る。この記事では端末名、CPU Name、LoadPercentage、TotalVisibleMemorySize、FreePhysicalMemory、取得時刻を同じサンプルへ入れるを判断軸にし、実行前の確認、記事固有のコード、合否判定、戻し方を一続きで示します。

ネットワーク使用量ではなくCPUと物理メモリを言語差に強い方法で観測する。完了は「複数サンプルに時刻と端末名が付き、CPU負荷率と使用・空きメモリの単位を説明できる」と定義します。対象が取れない場合は「CIMが空ならリモート権限や管理サービスを確認し、Get-Counterだけが失敗するならローカライズされたパスを調べる」として切り分け、推測で成功扱いにしません。

目次

英語カウンター名を直書きしない

言語非依存のCIMクラスでCPU負荷とメモリ量を採り、Get-Counterを使う場合はListSetから実機の名称を発見する。CPUとメモリのシステム監視ではこの進め方により、操作したという事実ではなく、期待する状態へ到達したかでタイトルの問いへ答えられます。ネットワーク使用量ではなくCPUと物理メモリを言語差に強い方法で観測する。

英語カウンター名を直書きしないの合格条件は、複数サンプルに時刻と端末名が付き、CPU負荷率と使用・空きメモリの単位を説明できることです。作業時刻、実行ユーザー、端末名を添え、判断に使った値が後から追える形にします。

Win32_Processorで負荷率を採る

Win32_Processorで負荷率を採るは変更前の基準点です。端末名、CPU Name、LoadPercentage、TotalVisibleMemorySize、FreePhysicalMemory、取得時刻を同じサンプルへ入れるを出力に含め、取得時刻と一緒に保存します。値だけを切り取ると別対象との比較になるため、識別列を省きません。

$cpu = Get-CimInstance -ClassName Win32_Processor |
  Select-Object Name, LoadPercentage
$os = Get-CimInstance -ClassName Win32_OperatingSystem
[pscustomobject]@{
  ComputerName = $env:COMPUTERNAME
  CpuLoadPercent = ($cpu | Measure-Object LoadPercentage -Average).Average
  TotalMemoryGiB = [math]::Round($os.TotalVisibleMemorySize / 1MB, 2)
  FreeMemoryGiB = [math]::Round($os.FreePhysicalMemory / 1MB, 2)
  CapturedAt = Get-Date
}

Get-Counterのカウンターセット名とパスはWindowsの表示言語でローカライズされる。固定した英語のProcessorやMemory文字列を全端末へ配ると日本語環境などで失敗し得る。出力が多い場合も最初から無理に一件へ絞らず、候補数と除外理由を残してから対象を決めます。

物理メモリの使用量を計算

物理メモリの使用量を計算では、言語非依存のCIMクラスでCPU負荷とメモリ量を採り、Get-Counterを使う場合はListSetから実機の名称を発見する。CPUとメモリのシステム監視の例中にある名前、パス、ID、時刻はサンプルなので、そのまま本番へ貼らず、直前の読み取り結果から承認値を入れます。

1..5 | ForEach-Object {
  $cpu = Get-CimInstance Win32_Processor
  $os = Get-CimInstance Win32_OperatingSystem
  [pscustomobject]@{
    CapturedAt = Get-Date
    CpuLoadPercent = ($cpu | Measure-Object LoadPercentage -Average).Average
    UsedMemoryGiB = [math]::Round(($os.TotalVisibleMemorySize - $os.FreePhysicalMemory) / 1MB, 2)
    FreeMemoryGiB = [math]::Round($os.FreePhysicalMemory / 1MB, 2)
  }
  Start-Sleep -Seconds 2
}

単発の100%や単位換算ミスで障害判定しない。短すぎる間隔で常時取得して監視自体を負荷にしない。CPUとメモリのシステム監視でプレビュー対応コマンドを使える場合はWhatIfを先に実行し、非対応の操作は対象一覧と引数を画面へ出して人が承認してから一度だけ実行します。

短い間隔を複数回サンプリング

短い間隔を複数回サンプリングでは同じ対象を別経路でもう一度読みます。判定したいのは「コマンドが終了したか」ではなく、複数サンプルに時刻と端末名が付き、CPU負荷率と使用・空きメモリの単位を説明できるかどうかです。

# Get-Counterを使う場合は、実機に存在するローカライズ済み名称を発見する
Get-Counter -ListSet * |
  Where-Object { $_.CounterSetType -in 'SingleInstance','MultiInstance' } |
  Select-Object CounterSetName, CounterSetType

CIMが空ならリモート権限や管理サービスを確認し、Get-Counterだけが失敗するならローカライズされたパスを調べる。CPUとメモリのシステム監視の期待値と実測値が一致しないときは追加変更を重ねず、対象識別、権限、ポリシー、時間差の順で原因を分けます。

瞬間値と継続高負荷を区別

単発の100%や単位換算ミスで障害判定しない。短すぎる間隔で常時取得して監視自体を負荷にしない。瞬間値と継続高負荷を区別に該当したら、警告を消して継続するのではなく、どの条件で止まったかを記録します。

CIMが空ならリモート権限や管理サービスを確認し、Get-Counterだけが失敗するならローカライズされたパスを調べる。CPUとメモリのシステム監視ではエラー本文、FullyQualifiedErrorId、対象ID、直前に成功した段階を残すと、別担当者が安全な地点から調査できます。

取得不能時はCIMとローカライズを確認

読み取りのみ。バックグラウンドジョブや定期タスクを作った場合は、そのジョブだけを停止・解除する。復旧操作にも同じ識別条件を使い、名前が似た別対象へ戻し処理を適用しません。

  • CPUとメモリのシステム監視の変更前値と取得時刻
  • 復旧対象: 端末名、CPU Name、LoadPercentage、TotalVisibleMemorySize、FreePhysicalMemory、取得時刻を同じサンプルへ入れる
  • 復旧後の判定: 複数サンプルに時刻と端末名が付き、CPU負荷率と使用・空きメモリの単位を説明できる
  • 再実行を止める条件: 単発の100%や単位換算ミスで障害判定しない。短すぎる間隔で常時取得して監視自体を負荷にしない

監視を止めても設定変更は残さない

継続時間、中央値、ピーク、業務イベントを併記し、プロセス別調査は高負荷が続いた端末へ限定する。CPUとメモリのシステム監視を繰り返す場合は、正常、対象なし、要承認、失敗を異なる終了状態として記録し、前回値との比較だけで異常を決めません。

監視を止めても設定変更は残さないの識別軸端末名、CPU Name、LoadPercentage、TotalVisibleMemorySize、FreePhysicalMemory、取得時刻を同じサンプルへ入れる
採用する実測複数サンプルに時刻と端末名が付き、CPU負荷率と使用・空きメモリの単位を説明できる
0件時の扱いCIMが空ならリモート権限や管理サービスを確認し、Get-Counterだけが失敗するならローカライズされたパスを調べる
保留にする兆候単発の100%や単位換算ミスで障害判定しない。短すぎる間隔で常時取得して監視自体を負荷にしない

質問:Get-Counterを使う場合

Q. CPUとメモリのシステム監視は管理者PowerShellなら必ず成功しますか。A. いいえ。Get-Counterのカウンターセット名とパスはWindowsの表示言語でローカライズされる。固定した英語のProcessorやMemory文字列を全端末へ配ると日本語環境などで失敗し得る。管理者権限は対象や製品仕様の不一致を解消しません。

Q. 0件を正常終了にできますか。A. CIMが空ならリモート権限や管理サービスを確認し、Get-Counterだけが失敗するならローカライズされたパスを調べる。要件上0件が許される場合だけ正常とし、検出できなかった状態とは分けて報告します。

CPUとメモリのシステム監視の実行記録には、開始前の対象候補、採用した識別値、実行したコード、終了後の実測、除外した候補と理由を同じ作業番号で残します。特に「端末名、CPU Name、LoadPercentage、TotalVisibleMemorySize、FreePhysicalMemory、取得時刻を同じサンプルへ入れる」を省くと、後日の再確認で別対象の値を比較するおそれがあります。画面コピーだけでなく、日時と端末名を含む構造化した出力も保存します。

PowerShellを使ってシステムのCPUとRAMをモニタリングする方法を定期手順へ組み込む場合も、初回は対話的に候補を確認します。正常時は「複数サンプルに時刻と端末名が付き、CPU負荷率と使用・空きメモリの単位を説明できる」、判定不能時は「CIMが空ならリモート権限や管理サービスを確認し、Get-Counterだけが失敗するならローカライズされたパスを調べる」、中止時は「単発の100%や単位換算ミスで障害判定しない。短すぎる間隔で常時取得して監視自体を負荷にしない」をそれぞれ別の結果として扱います。これにより、0件や例外を都合よく成功へ丸めず、次の担当者が同じ対象と条件で追試できます。

公式情報・参考資料

CPUとメモリのシステム監視で使うコマンド名、引数、対応環境は次のMicrosoft一次資料で確認しました。記事の確認日は2026年7月17日です。OSやモジュール更新後は、実行端末のGet-Helpと併せて再確認してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次