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

PowerShellはMicrosoftが開発したスクリプト言語であり、主にWindows環境で使用される強力な自動化ツールです。この記事では、PowerShellを使ってシステムのCPUやRAMの使用状況をモニタリングする方法について説明します。PowerShellが初めての方でも、この記事を通じて基本的な操作から応用例まで理解できるでしょう。

目次

PowerShellとは

PowerShellはWindows管理者や開発者がよく利用するスクリプト環境です。コマンドラインインターフェース(CLI)とスクリプト言語の機能を持ち、WindowsだけでなくLinuxやmacOSでも使用可能です。

前提条件

この記事で使用するコマンドは、Windows 10またはそれ以降のバージョンで動作することを前提としています。

環境の準備

まず、PowerShellがインストールされているかどうかを確認しましょう。

# PowerShellがインストールされているか確認
$PSVersionTable.PSVersion

基本的な監視スクリプト

以下のスクリプトは、CPUとRAMの使用率を取得する基本的なものです。

# CPUとRAMの使用率を取得
$cpuUsage = (Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5).CounterSamples.CookedValue | Measure-Object -Average | Select-Object -ExpandProperty Average
$ramUsage = (Get-Counter -Counter "\Memory\% Committed Bytes In Use" -SampleInterval 1 -MaxSamples 5).CounterSamples.CookedValue | Measure-Object -Average | Select-Object -ExpandProperty Average

# 結果を出力
"CPU使用率: $cpuUsage%"
"RAM使用率: $ramUsage%"

コードの説明

1. `$cpuUsage`と`$ramUsage`には、それぞれCPUとRAMの使用率が格納されます。
2. `Get-Counter`コマンドは、システムのパフォーマンスデータを取得します。
3. `Measure-Object`で平均値を計算し、`Select-Object`でその値だけを取り出しています。

応用例

基本的なスクリプトを理解したら、次に応用例を見てみましょう。

応用例1: ログファイルに記録

# ログファイルにCPUとRAMの使用率を記録
$logFile = "C:\path\to\log.txt"
"CPU使用率: $cpuUsage%, RAM使用率: $ramUsage%" | Out-File -FilePath $logFile -Append

応用例2: メールで通知

# 使用率が高い場合にメールで通知
if ($cpuUsage -gt 90 -or $ramUsage -gt 90) {
    Send-MailMessage -To "admin@example.com" -Subject "High Resource Usage Alert" -Body "CPU: $cpuUsage%, RAM: $ramUsage%" -From "monitor@example.com" -SmtpServer "smtp.example.com"
}

応用例3: 一定期間ごとに監視

# 5分ごとに監視
while ($true) {
    # 前述の監視コード
    Start-Sleep -Seconds 300
}

応用例4: 特定のプロセスのリソース使用量を監視

# 特定のプロセス(例:chrome.exe)のCPUとRAM使用量を取得
$processInfo = Get-Process -Name 'chrome'
"Chrome CPU: $($processInfo.CPU)%, Chrome RAM: $($processInfo.WorkingSet / 1MB)MB"

応用例5: リモートコンピューターのリソースを監視

# リモートコンピューター(例:Server01)のCPUとRAM使用率を取得
$cpuUsageRemote = Invoke-Command -ComputerName 'Server01' -ScriptBlock {
    (Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5).CounterSamples.CookedValue | Measure-Object -Average | Select-Object -ExpandProperty Average
}
"Server01 CPU使用率: $cpuUsageRemote%"

まとめ

PowerShellは非常に多機能なツールであり、システムのモニタリングにも優れた能力を持っています。この記事では基本的なモニタリング方法から多彩な応用例までを紹介しました。これを機に、PowerShellを活用して効率的なシステム管理を行ってみてください。

コメント

コメントする

目次