2016-10-19 80 views
0

我正在處理腳本以監視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

這對我工作得很好:

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

查看更新的答案。如果'$ value'大於或等於60,'else'子句將會運行。 –

+0

是的,這是我的,但else子句沒有運行。這是我正在嘗試的簡化版本。 'While($ True){Value =(Get-Counter-Counter「\ Memory \%committed in use」)。CounterSamples.CookedValue If($ value -lt 60)Write-Host「Committed Byte在當前使用的數量是有限制的,當前值爲$($ value)「} } Else { Write-Host」正在使用的已使用超出限制值,當前值爲$($ value)。「 }' – YEMyslf