2016-10-19 1 views
0

에 나는 PowerShell의 일부 성능 문제를 모니터링하는 스크립트에서 일하고 있어요. 다음은 내가하고 싶은 것에 대한 개요입니다.다시 시작 루프는 파워 쉘

  • 확인 사용의 모든 커밋 된 바이트 60 초마다
  • 만약 60 % 이하, 로그인
  • 의 경우 60 % 이상을 잠을, 프로세스가 페이지 된 많은 양의 메모리를 소모 경고 로그 1
  • 단계로 돌아갑니다

무한히 실행하고 싶습니다. (일단 끝날 때까지 작업이 끝나면)이 루핑 개념을 두뇌로 감싸는 데 문제가 있습니다. 내가 읽은 바로는 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 절이지만 else 절은 실행되지 않습니다. 다음은 내가 시도하고있는 것의 단순화 된 버전입니다. '($ True) { $ value = (Get-Counter -Counter 사용중인 \ Memory \ % 커밋 된 바이트) CounterSamples.CookedValue If ($ value -lt 60) { Write-Host "Committed bytes 값이 현재 $ ($ 값)입니다. "} } 쓰기 호스트"사용중인 약정이 초과되었습니다. 현재 값은 $ ($ 값)입니다. " }' – YEMyslf