やりたいこと
特定のアプリケーションのメモリ使用量を監視して、結果をcsvとする方法をpowershellでやってみたいです。コマンドプロンプトで行う方法は、こちらになります。
最終的にこうなる
こんなCSVを作りたいStep1 使用するコマンド(コマンドレット)
Get-Process を使用します。 powershellでGet-Processを打ち込むと、メモリの使用量等の情報を出してくれるコマンドになります。Step2 対象のプロセスを絞る
Get-Processの後対象のプロセスの名称を入れると、それだけを表示できるようになります。ペイントのみにしてみました。
Step3 Get-Processの戻り値を取得する
powershellでは、ドルマークを頭につけたものが変数になります。 (例 $ret)これにGet-Processの戻り値を入れます。
※.NetのSystem.Diagnostics.Processが取得できます。(詳しくは、 こちら。 Processクラスについては、 こちら。 )
戻り値がProcessクラスのオブジェクトになっているため、
[変数].[メンバ]のようにして、メンバ変数(プロパティ)にアクセスができます。
Processクラスには、メモリ使用量みたいなものがいっぱいあるのですが、物理メモリの使用量WorkingSet64を表示させたい場合はこんな感じにします。
Step4 スクリプトにする
ループさせて、1秒ごとに、メモリの使用量を取得するようにしたものが下のものになります。できたら、「.ps1」という拡張子をつけて保存します。
#---見出し--- $midashi = "DateTime, " + "WorkingSet64[B], " echo $midashi #---メモリの監視--- for ( $i = 0; $i -lt 10; $i++ ) { #監視する プロセスを取得(毎回取得する。) $ret = get-process mspaint #情報を出力 $outinfo = (get-date).DateTime + ", " + $ret.WorkingSet64 echo $outinfo #1秒待つ。 Start-Sleep -s 1 }
Step5 csvファイルに出力する。
スクリプトを実行するときに、以下のようにして、実行すればcsvファイルが作成されます。SJISでcsvファイルを作るために、| out-file....をしています。
以上となります。
苦労した点
・単純にリダイレクト( > )しただけだと、unicodeで保存されるそうで、できたcsvをexcelで開くと、1列だけになって、あれ?っとなりました。・最初、コマンドプロンプトでやったみたいに、get-processの出力結果からヘッダをとって、csv形式で出す方向で調べていたのですが、
そっちはわからなかったです。
・get-processの戻り値を取得したのはいいのですが、echo $retとやると丸ごとでるし、どう扱えばよいのかよく分からなく行き詰りました。
・echoで改行しないで出力する方法がよくわからず。単純に echo 変数1, 変数2 みたいにしてたら、改行されて行き詰りました。 + で結べばいいんですね。
0 件のコメント:
コメントを投稿