0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[PowerShell]CPUリソース、メモリリソースのチェックスクリプト

Posted at

こんにちは!れーあです。
前回に引き続き、PowerShellのスクリプトの勉強をしていきます。
なお、今回は課題をChatGPTに考えてもらいました。

前回はこちら↓
[PowerShell]大量のファイルを作成するスクリプト

それではどうぞ。

前提情報

スクリプト実行環境

PS C:\Users\user> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  4046

スクリプト内容

では今回のスクリプトです。

処理内容:
 CPU、メモリのリソース使用率を取得する。
 その後、CPUまたはメモリのどちらかの使用率が80%以上であれば
 エラーメッセージを表示、そうでなければ正常メッセージを表示させて
 その内容をログファイルに出力する。

# CPUとメモリの使用率を取得
$CPUUsage = Get-WmiObject win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object -ExpandProperty Average
$OS = Get-WmiObject win32_operatingsystem
$FreeMemory = [math]::Round(($OS.FreePhysicalMemory / 1MB), 2)
$TotalMemory = [math]::Round(($OS.TotalVisibleMemorySize / 1MB), 2)
$MemoryUsage = [math]::Round((($TotalMemory - $FreeMemory) / $TotalMemory) * 100, 2)

# 使用率が80%を超えているか確認。超過ならエラーメッセージ、そうでないなら正常メッセージをログファイルに出力する
$logPath = "C:\Users\user\Desktop\logFile.log"

if ($CPUUsage -gt 80 -or $MemoryUsage -gt 80){
	$message = "Warning: resouce usage is high. CPU usage $CPUUsage%, Memory usage $MemoryUsage%"

	# 警告メッセージを表示
	Write-Host $message

	# ログファイルに警告メッセージと現在時刻記載
	$logMessage = "$(Get-Date -Format "yyyy-MM-dd HH:mm:ss"): $message"
	Add-Content -Path $logPath -Value $logMessage
} else {
	$message = "All Normality. CPU resouce: $CPUUsage%, Memory resouce $MemoryUsage%"

	# 正常メッセージを表示
	Write-Host $message

	# ログファイルに正常メッセージと現在時刻記載
	$logMessage = "$(Get-Date -Format "yyyy-MM-dd HH:mm:ss"): $message"
	Add-Content -Path $logPath -Value $logMessage
}

Write-Host "Script Finished"

使用コマンドレット説明

  • $CPUUsage = Get-WmiObject win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object -ExpandProperty Average

長いですが、上記コマンドレットでCPUリソースを取得します。
「Get-WmiObject win32_processor」でCPU情報を取得、「Measure-Object」でそれらの項目を計算、「Select-Object」でそのうちのどれを使用するかを選択します。

  • $OS = Get-WmiObject win32_operatingsystem
  • $FreeMemory = [math]::Round(($OS.FreePhysicalMemory / 1MB), 2)
  • $TotalMemory = [math]::Round(($OS.TotalVisibleMemorySize / 1MB), 2)
  • $MemoryUsage = [math]::Round((($TotalMemory - $FreeMemory) / $TotalMemory) * 100, 2)

上記でメモリリソースを取得します。
「win32_operatingsystem」ではOSの情報を取得します。
メモリの情報というのはどうやらこのOSの情報に含まれているようでしたので、こちらで取得します。
その後、整形をします。「[math]::Round」では四捨五入をしてわかりやすい形で数値を変換します。

  • Add-Content -Path $logPath -Value $logMessage
    上記では指定したファイルに指定した値を記載します。
    今回ではエラーメッセージまたは正常メッセージを出力しています。

そのほかのIf文や「Write-Host」などは
個人的に重要度が高くないため、省略します。

実際に動かしてみた

では、実際に動かしてみます。
今回は「C:\Users\user\Desktop\logFile.log」というログファイルに結果を出力します。変更も可能です。
image.png

対象ファイルを右クリックして、「PowerShellで実行」で動かします。
image.png

一瞬PowerShellが開いた後、デスクトップ上に「logFile.log」が作成されます。
image.png

中身を確認すると、CPU、メモリともに80%以上ではないため、正常メッセージが出力されています。
image.png

正常に出力されていましたね。

ちなみに、しきい値を20%にして再実行してみると、想定通りエラーメッセージが出力されていました。エラー時も正常に動作するようです。
image.png

おわりに

というわけで今回はCPUリソース、メモリリソースのチェックを行うスクリプトを作成しました。
実際仕事ではなかなか自作でCPU、メモリのリソースチェックを行うことはないでしょうが、どのように動作するかは今回ので勉強することができたので、ある程度スムーズに触れるようになったのではないかと考えています。

参考

WMIクラス - learn.microsoft.com
win32_processor - learn.microsoft.com
win32_operatingsystem - learn.microsoft.com

Get-WmiObject - learn.microsoft.com
Measure-Object - learn.microsoft.com
Select-Object - learn.microsoft.com
Add-Content - learn.microsoft.com
Get-Date - learn.microsoft.com

「[math]::Round」だけは公式ドキュメントみてもよくわからなかったので下記を参考にさせていただきました。
https://step-learn.com/article/powershell/034-number-round.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?