0
私はPowerShellのパフォーマンス上の問題を監視するスクリプトを作成しています。ここに私がしたいことの概要があります。PowerShellのループを再起動
- チェック使用中のすべてのコミットバイトごとに60秒
- 60%以下であれば、60%を超える
- た場合のログを記録し、睡眠、ページメモリを大量に消費するプロセスを記録し、警告と1 段階に戻ります
私はこれを無限に実行したいと思いますが(Untilパートがやり終えたら)、私はこれらのループ概念のいくつかの周りに脳をラップするのに問題があります。私が読んだところでは、おそらくbreak
またはcontinue
を使うことができましたが、これを行う最も効率的な方法は何か分かりません。
ここに私が使用しているコードの一部があります。重要な場合、私はロギング機能のために機能を使用しており、これをバックグラウンドにするためにジョブとして実行しています。
Add-Type -AssemblyName System.Windows.Forms
Do{
$value = (Get-Counter -Counter "\Memory\% committed bytes in use").CounterSamples.CookedValue
LogOnly -Text "Committed bytes in use is currently $($value)"
Start-Sleep -Seconds 60
}
Until($value -gt 60)
LogOnly -Text "Commited bytes in use is currently $($value)."
$Processes = Get-Process | Where {$_.PM -gt 500MB} | ForEach {LogOnly -Text "Processes above 300MB is $($_.ProcessName)"}
[System.Windows.Forms.MessageBox]::Show("Committed Memory % has increased to $value.", 'Memory Warning', '0', 'Warning')
おかげ
うん、私はそのような何かを試してみましたが、値が60未満であれば、それは動作しますが、私はまた、他のアクションを記録して取る必要がありますそれが60歳を超えると、それを働かせることができません。私は 'Else {他のものをする}'を使ってみましたが、それはちょうどハングし、その部分を実行しません。 – YEMyslf
更新された回答を参照してください。 'else'節は、' $ value'が60以上の場合に実行されます。 –
そうですが、else節は実行されていません。ここに私がしようとしているものの簡略版があります。 (Get-Counter -Count "使用中のメモリ"%コミットされたバイト数)CounterSamples.CookedValue If($ value -lt 60){ Write-Host "Committed bytes使用に制限下にある。値は、現在$($値) "}エルス } { 書き込みホスト『使用中コミット不戦勝が限界を超えている。値が現在$($値)です。』 } ' – YEMyslf