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')
감사
그래 내가 그 같은 것을 시도하고 값이 60 미만이지만, 나는 또한 로그 및 기타 작업을 수행해야하는 경우 작동 왜냐하면 60 세가 넘었을 때 그 일을 할 수 없기 때문입니다. 나는'Else {다른 것들을해라} '를 사용하려했지만, 단지 멈추고 결코 그 부분을 실행하지 않는다. – YEMyslf
업데이트 된 답변보기 'else' 절은'$ value'가 60보다 크거나 같으면 실행됩니다. –
그래, 그게 else 절이지만 else 절은 실행되지 않습니다. 다음은 내가 시도하고있는 것의 단순화 된 버전입니다. '($ True) { $ value = (Get-Counter -Counter 사용중인 \ Memory \ % 커밋 된 바이트) CounterSamples.CookedValue If ($ value -lt 60) { Write-Host "Committed bytes 값이 현재 $ ($ 값)입니다. "} } 쓰기 호스트"사용중인 약정이 초과되었습니다. 현재 값은 $ ($ 값)입니다. " }' – YEMyslf