##Parameter $NUMBER_OF_SAMPLES = 5; $SAMPLE_INTERVAL_TIME = 1; ###Load server list $serverList = Get-Content -Path C:\temp\server.txt; ##Defining the counter and threshold values ##Each line: Counter, alarm triggers if over/under, threshold value $counters = ( ('\Memory\Available MBytes', 'under', 500), #Alert if under 500 ('\Processor(_Total)\% Processor Time', 'over', 60), #Alert if over 60 ('\LogicalDisk(_Total)\% Free Space', 'under', 10 ) #Alert if under 10 ) #Array end function checkLowerLimit([int]$threshold, [int]$average) { if($average -lt $threshold) { Write-Host "threshold value not reached!" return $false; } return $true; } function checkUpperLimit([int]$threshold, [int]$average) { if($average -gt $threshold) { Write-Host "threshold value exceeded!" return $false; } return $true; } function getPerformanceData([array]$counter, [string]$machine) { try { $v = Get-Counter -Counter $counter -ComputerName $machine -MaxSamples $NUMBER_OF_SAMPLES -SampleInterval $SAMPLE_INTERVAL_TIME -ErrorAction SilentlyContinue if($v -eq $null -or $v -eq "") { Write-Host "Counter $($counter) delivered no value." Continue; } $average = ($v.CounterSamples.CookedValue | Measure-Object -Average).Average } catch { Write-Host "Error: the counter could not be collected. Reason: $($_)" } ##Bigger or smaller? if($counter[1] -eq "under") { $limit = checkLowerLimit $counter[2] $average } else { $limit = checkUpperLimit $counter[2] $average } ##If the test retruns a "$false", the threshold value has been damaged: if(-not $limit) { Write-Host "[$($machine)] Counter $($counter[0]) has, with the value $($average), exceed $($counter[2]) not reached $($counter[1]) the threshold value." } } ###The script starts here: $c = $serverlist.Count * $counters.Count $i=0; foreach($server in $serverList) { foreach($counter in $counters) { Write-Progress -activity "Collecting performance data" -status "Counter data $($i+1) from $($c): $($counter) on $($server)" -PercentComplete $(($i+1)/($c)*100) getPerformanceData $counter $server $i++; } } #End foreach server Write-Host "End of the collection. Threshold limit damages are issued on the command line."