Guest User

Untitled

a guest
Aug 15th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. Param(
  2. [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
  3. [string]
  4. $Process,
  5.  
  6. [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
  7. #[string]
  8. [ValidatePattern("^(\d\.){0,1}(([0|1]\d)|(2[0-3])):[0-5]\d:[0-5]\d")]
  9. $TimeSpan,
  10.  
  11. [Parameter(Mandatory=$false, ValueFromPipeline=$true)]
  12. [ValidateRange(0, 1000)]
  13. [Int]
  14. $MaxWarn = 1,
  15.  
  16. [Parameter(Mandatory=$false, ValueFromPipeline=$true)]
  17. [ValidateRange(0, 1000)]
  18. [Int]
  19. $MaxCritical = 0
  20. )
  21.  
  22. Function ProcessesExceeding
  23. {
  24. Param(
  25. [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
  26. [string]
  27. $ProcessName,
  28. [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
  29. [TimeSpan]
  30. $MaximumRunTime
  31. )
  32. Process
  33. {
  34. Get-Process | ? { $_.Name -eq $ProcessName -and ((New-TimeSpan $_.StartTime) -gt $MaximumRunTime) } `
  35. | % { Add-Member -InputObject $_ -MemberType NoteProperty -name TotalMinutesRunning -value (New-TimeSpan $_.StartTime).TotalMinutes -PassThru }
  36. }
  37. }
  38.  
  39. $parsedTime = [TimeSpan]::Parse($TimeSpan)
  40. $procs = ProcessesExceeding $Process $parsedTime
  41.  
  42. $running = if ($null -eq $procs) { 0 } else { $procs.Length }
  43.  
  44. $averageRuntime = if ($null -eq $procs) { 0 } else { $procs | measure-object TotalMinutesRunning -ave | % { [Math]::Round($_.Average, 2) } }
  45. $status = if ($running -ge $MaxCritical) { "Critical" } elseif ($running -ge $MaxWarn) { "Warning" } else {"OK" }
  46.  
  47. Write-Host "${status}: Processes Running More Than ${parsedTime}: $running|'$Process'=$running;$averageRuntime;$MaxWarn;$MaxCritical"
Add Comment
Please, Sign In to add comment