2016-10-19 12 views
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') 

おかげ

答えて

1

は、これは私のために正常に動作します:

while ($true) { 
    $value = (Get-Counter -Counter "\Memory\% committed bytes in use").CounterSamples.CookedValue 
    if ($value -lt 60) { 
    Write-Host "Committed bytes in use is under limit. Value is currently $value" 
    } 
    else { 
    Write-Host "Commited byes in use is over limit. Value is currently $value" 
    } 
    Start-Sleep -Seconds 3 
} 
+0

うん、私はそのような何かを試してみましたが、値が60未満であれば、それは動作しますが、私はまた、他のアクションを記録して取る必要がありますそれが60歳を超えると、それを働かせることができません。私は 'Else {他のものをする}'を使ってみましたが、それはちょうどハングし、その部分を実行しません。 – YEMyslf

+0

更新された回答を参照してください。 'else'節は、' $ value'が60以上の場合に実行されます。 –

+0

そうですが、else節は実行されていません。ここに私がしようとしているものの簡略版があります。 (Get-Counter -Count "使用中のメモリ"%コミットされたバイト数)CounterSamples.CookedValue If($ value -lt 60){ Write-Host "Committed bytes使用に制限下にある。値は、現在$($値) "}エルス } { 書き込みホスト『使用中コミット不戦勝が限界を超えている。値が現在$($値)です。』 } ' – YEMyslf

関連する問題