在PowerShell中重启循环

时间:2016-10-19 18:29:00

标签: loops powershell

我正在编写一个脚本来监控PowerShell中的一些性能问题。以下是我想要做的概述。

  • 每60秒检查一次使用的每个承诺字节
  • 如果低于60%,请记录并睡眠
  • 如果超过60%,日志进程会占用大量分页内存,提醒并返回步骤1

我希望这是无限运行(一旦直到部分完成重新开始),但是我在围绕其中一些循环概念缠绕我的大脑时遇到了麻烦。根据我的阅读,我可能会使用breakcontinue,但我不确定最有效的方法是什么。

以下是我正在使用的代码的一部分。如果重要的话,我正在使用一个函数来记录日志功能并将其作为一个Job运行,因此它就在后台。

        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 个答案:

答案 0 :(得分: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
}