Share via


powershell simple bandwidth monitor

very simple bandwidth monitor

allows you to select your interface and will take the average bandwidth over 60 seconds (you can configure!)

here it is !....

 

 

$interfaces = Get-WmiObject -class Win32_PerfFormattedData_Tcpip_NetworkInterface |select name
$totalnoint = $interfaces.count

Write-Host "Please select the interface you wish to use by selecting its number and pressing enter to continue `n"
For ($cnt = 0;$cnt -lt $totalnoint;$cnt++)
{
 Write-Host "$cnt.`t" $interfaces[$cnt].name
}

$result = Read-host

$name = $interfaces[$result].name
Write-Host "Working with Interface:`t" $name

$interfacebw = Get-WmiObject -class Win32_PerfFormattedData_Tcpip_NetworkInterface |where {$_.Name -eq $name} |select CurrentBandwidth
$intbwbytes = $interfacebw.currentbandwidth /8
$timer = 60
$waitMinutes = 1
$startTime = get-date
$endTime   = $startTime.addMinutes($waitMinutes)
$timeSpan = new-timespan $startTime $endTime
$count = 0
$avgvalue = 0

while ($timespan -gt 0)
{
 $timeSpan = new-timespan $(Get-Date) $endTime
 $currentbytespersec = Get-WmiObject -class Win32_PerfFormattedData_Tcpip_NetworkInterface |where {$_.Name -eq $name} |select BytesTotalPersec
 [int]$linkutil = ($currentbytespersec.bytestotalpersec / $intbwbytes) * 100
 $value = "{0:N2}" -f $linkutil
 cls
 Write-Host "Link is $value% utilized"
 $avgvalue = $avgvalue + $value
 $count++
 Write-Host $timespace.seconds
 
}

$avgbw = $avgvalue / $count
$value = "{0:N2}" -f $avgbw
Write-Host "Average BW is:`t $value Bytes/Sec"