本記事はマイクロソフト社員によって公開されております。
こんにちは、Windows サポート チームの栗木です。
Windows の標準アプリであるパフォーマンス モニターには、パフォーマンス カウンターが設定した閾値を上回る、または下回った時にプログラムを実行できる機能があります。本記事では、利用可能な物理メモリが 1024MB 以下になった時に PowerShell スクリプトを実行する手順をご紹介いたします。紹介しているコマンドは、すべて管理者として起動したコマンドプロンプトで実行してください。
適用対象の OS
- すべての Windows OS
概要
パフォーマンス カウンターの警告を利用してプログラムを実行するには、以下の手順が必要になります。
手順1 実行するプログラムの作成
手順2 手順1で作成したプログラムを実行するタスクを作成
手順3 手順2で作成したタスクを実行するデータ コレクター セットを作成
手順4 手順3で作成したデータ コレクター セット を開始
手順1. 実行するプログラムの作成
例として、今回は tasklist.exe /SVC
の実行結果をファイルへ出力する以下の PowerShell スクリプトを用意します。
1 | $Date = Get-Date -Format "yyyyMMddHHmmss" |
この PowerShell スクリプトを任意の名前で保存し、ローカル ドライブの任意の場所に保存してください。
ここでは、例として、C:\Users\user\Desktop\sample.ps1
に保存します。
手順2. 手順1で作成したプログラムを実行するタスクを作成
プログラムを実行するタスクを schtasks コマンド で作成します。powershell.exe の -Command
オプションに手順1で作成したスクリプトをフルパスで指定します。
1 | schtasks /create /tn "MemoryAlertTask" /sc ONCE /st 00:00 /tr "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:\Users\user\Desktop\sample.ps1" /ru system /rl highest |
このコマンドを実行すると 警告: /ST が現時刻よりも早いため、タスクは実行されない可能性があります。というメッセージが表示されますが、今回は時間を指定して実行するタスクではないので、無視して問題ありません。コマンドの実行が完了すると、タスク スケジューラに MemoryAlertTask という名前でタスクが作成されるので確認してください。
手順3. 手順2で作成したタスクを実行するデータ コレクター セットを作成
手順2で作成したタスクの名前を -tn
オプションに指定して、logman create alert コマンド を実行します。
1 | logman create alert "MemoryAlert" -th "\Memory\Available MBytes<1024" -si 00:05:00 -tn "MemoryAlertTask" -el |
このデータ コレクター セットは、5分間隔で利用可能な物理メモリ量を確認し、1024MB を下回っていたら手順2で作成したタスクを実行します。その際には、イベントログ(アプリケーションとサービスログ\Microsoft\Windows\Diagnosis-PLA\Operational)に以下のようなイベントが記録されます。
イベントID 2031:パフォーマンス カウンター \Memory\Available MBytes は警告のしきい値に達しました。
コマンドの実行が完了すると、パフォーマンス モニターに MemoryAlert という名前でデータ コレクター セットが作成されるので確認してください。
手順4. 手順3で作成したデータ コレクター セット を開始
手順3で作成したデータ コレクター セットの名前を指定し、logman start コマンド で警告監視を開始させます。
1 | logman start "MemoryAlert" |
注意として、データ コレクター セットは、システム起動に自動的に開始しません。つまり、再起動すると監視が停止してしまいます。そのため、必須ではありませんが、システム起動時に警告監視を自動的に開始させるタスクを schtasks コマンド で作成しておきます。
1 | schtasks /create /tn "MemoryAlertOnStart" /sc onstart /tr "logman start MemoryAlert" /ru system |
コマンドの実行が完了すると、タスク スケジューラに MemoryAlertOnStart という名前でタスクが作成されるので確認してください。
以上で、設定は完了になります。利用可能な物理メモリが 1024MB 以下になった時に PowerShell スクリプトが実行される状態になりました。スクリプトが実行されない場合は、コマンド schtasks /run /tn "MemoryAlertTask"
でタスクを手動実行できるか、または手順3で -th
オプションに指定した \Memory\Available MBytes<1024
の閾値変更や不等号を逆にして実行されるか確認し、設定に誤りがないかチェックしてみてください。
設定の削除方法
警告監視を停止し、すべての設定を削除したい場合は、以下のコマンドを実行してください。
1 | logman stop "MemoryAlert" |
参考 URL
変更履歴
- 2021/07/19 : 本 Blog の公開