NIC Utilisation

This topic contains 4 replies, has 2 voices, and was last updated by Profile photo of Mark Prior Mark Prior 1 month ago.

  • Author
    Posts
  • #56858
    Profile photo of Mark Prior
    Mark Prior
    Participant

    Hi Gents, i have the below one liner which kind of gets me the info i need (at least current state measurement)

    Get-WmiObject -class Win32_PerfFormattedData_Tcpip_NetworkInterface -ComputerName eurxmbs04 | Where-Object {$_.Name -like "*HP*"} | format-table Name,BytesTotalPersec, CurrentBandwidth,PacketsPersec

    it produces a table like below

    Name BytesTotalPersec CurrentBandwidth PacketsPersec
    —- —————- —————- ————-
    HP Ethernet 1Gb 4-port 331i Adapter 32888336 1000000000 27643
    HP Ethernet 1Gb 4-port 331i Adapter _2 13934503 1000000000 12983
    HP Ethernet 1Gb 4-port 331i Adapter _3 16849901 1000000000 18291
    HP Ethernet 1Gb 4-port 331i Adapter _4 42856234 1000000000 35214
    HP Network Team _1 30168422 2000000000 19444

    However what i would like to do is measure the % similar to what task manager produces and put this at the end of the table, any pointers would be much appreciated

  • #56912
    Profile photo of Mark Prior
    Mark Prior
    Participant

    ended up with the below

    
    
    $colInterfaces = Get-WmiObject -class Win32_PerfFormattedData_Tcpip_NetworkInterface -ComputerName eurxmbs04 | Where-Object {$_.Name -eq "HP Ethernet 1Gb 4-port 331i Adapter" -or $_.Name -eq "HP Ethernet 1Gb 4-port 331i Adapter _4" -or $_.Name -eq "HP Network Team _1"} 
    
    
    
       foreach ($interface in $colInterfaces) {
    
            $bitsPerSec = $interface.BytesTotalPersec * 8
            $totalBits = $interface.CurrentBandwidth
             if ($totalBits -gt 0) {
             $result = (( $bitsPerSec / $totalBits) * 100)
             $interface2 = $interface | select name -ExpandProperty name 
             $interface3 = $interface | select pscomputername -ExpandProperty pscomputername
    
             $text =  "$interface2 on $interface3
             
             Bandwidth utilized:  $result %
    
             
    
             " 
             
             if ($result -gt 60) {     
             
    ##Variables
    
       
        $smtpServer = "smtp.test.com"
        $From = "NIC-Monitor@test.com"
        $SubjectCPY = "NIC $interface2 on $interface3 is above 60% Threshold"
        $Body = "$text"
        $prior = "mark.prior@test.com"
    
    #Email Content
    ## -cc $mail will mail user account
    Send-Mailmessage -smtpServer $smtpServer -from $from -to $Prior -subject $subjectCPY -priority High -Body $Body -BodyAsHtml}
             
             
             
             }}
             
  • #56921
    Profile photo of Richard Siddaway
    Richard Siddaway
    Moderator

    You can simplify your code quite a bit by utilising the pipeline

    You'll need to add your original where-object filter back in and change the threshold in the last where

    Get-WmiObject -ClassName Win32_PerfFormattedData_Tcpip_NetworkInterface |
    where CurrentBandwidth -gt 0 | 
    foreach {
       
       $props = [ordered]@{
         Name = $psitem.Name
         Computer = $psitem.PSComputerName
         PercUtilisation = (($psitem.BytesTotalPersec * 8) / $psitem.CurrentBandWidth) * 100
       }
       
       New-Object -TypeName PSObject -Property $props
    
     } |
     where PercUtilisation -gt 0.5 |
     foreach {
       $text =  @"
       $($_.Name) on $($_.Computer)
             
       Bandwidth utilized:  $($_.PercUtilisation) %
       
       
    "@
    
     $smtpServer = 'smtp.test.com'
     $From = 'NIC-Monitor@test.com'
     $SubjectCPY = "NIC $($_.Name) on $($_.Computer) is above 60% Threshold"
     $prior = 'mark.prior@test.com'
     Send-Mailmessage -smtpServer $smtpServer -from $from -to $Prior -subject $subjectCPY -priority High -Body $text -BodyAsHtml
    
     }
    
    
  • #57016
    Profile photo of Mark Prior
    Mark Prior
    Participant

    Thanks richard

  • #57017
    Profile photo of Mark Prior
    Mark Prior
    Participant

    Actually another question, if it detects utilisation on 1 NIC over the threshold how can i get the email to encorp the other results that may or may not be over the threshold ? i.e how would i get the below

    "Subject: NIC HP Ethernet 1Gb 4-port 331i Adapter _4 on EURXMBS04 is above 60% Threshold

    HP Ethernet 1Gb 4-port 331i Adapter _4 on EURXMBS04 Bandwidth utilized: 67.128768 %

    HP Ethernet 1Gb 4-port 331i Adapter on EURXMBS04 Bandwidth utilized: 20.965184 %

    HP Network Team _1 on EURXMBS04 Bandwidth utilized: 10.7366888 % "

You must be logged in to reply to this topic.