# PRTG-SfBAssessment.ps1 # Uses the Microsoft Network Assessment Tool to check # # 20161015 frank@carius.de # Initial Version # 20180203 frank@carius.de # Updates for updated SfB Assessment tool Nov 2017 # 20180423 frank@carius.de # Added parsing of result codes # Bugfix if only one measurement done and avg/max calculation # parameter sfbpath added param ( $prtgserveruri = "http://prtg:5050/sfbassessment1", $resultcsvname = "$($env:LOCALAPPDATA)\Microsoft Skype for Business Network Assessment Tool\performance_results.tsv", $sfbpath = "c:\program Files\Microsoft Skype for Business Network Assessment Tool\" ) write-host "PRTG-SfBAssessment:Start" write-host " Parameter resultcsvname: $($resultcsvname)" write-host " Parameter prtgserveruri: $($prtgserveruri)" while ($true) { write-host "PRTG-SfBAssessment: Execute Assessment tool" Start-Process -FilePath ($sfbpath + "NetworkAssessmentTool.exe") -NoNewWindow -Wait -workingDirectory $sfbpath write-host "PRTG-SfBAssessment: Parsing Result TSV" $result = Import-Csv $resultcsvname -Delimiter "`t" write-host "PRTG-SfBAssessment: Calculating results" $Packetssent = ($result | %{$_.PacketsSent.replace(",",".")} | Measure-Object -sum) $PacketLossRate = ($result | %{$_.packetlossrate.replace(",",".")} | Measure-Object -Average -Maximum) $RoundTripLatencyInMs= ($result | %{$_.RoundTripLatencyInMs.replace(",",".")} | Measure-Object -Average -Maximum) $AverageJitterInMs = ($result | %{$_.AverageJitterInMs.replace(",",".")} | Measure-Object -Average -Maximum) $PacketReorderRatio = ($result | %{$_.PacketReorderRatio.replace(",",".")} | Measure-Object -Average -Maximum) write-host " Runs : $($Packetssent.count)" write-host " Packetssent : $($Packetssent.sum)" write-host " PacketLossRate (avg): $($PacketLossRate.Average)" write-host " RoundTripLatencyInMs(avg): $($RoundTripLatencyInMs.Average)" write-host " AverageJitterInMs (avg): $($AverageJitterInMs.Average)" write-host " PacketReorderRatio (avg): $($PacketReorderRatio.Average)" write-host "PRTG-SfBAssessment: Build PRTG XML" $prtgresult = ' Runs ' + $totalPacketsSent.count +' 0 Count Packet loss rate avg ' + $totalPacketsSent.sum +' 0 Count Packet loss rate avg ' + $PacketLossRate.Average +' 1 count Packet loss rate max ' + $PacketLossRate.Maximum +' 1 count RTT latency avg ' + $RoundTripLatencyInMs.Average +' 1 Custom Milliseconds RTT latency Max ' + $RoundTripLatencyInMs.Maximum +' 1 Custom Milliseconds Jitter ' + $AverageJitterInMs.Average +' 1 Custom Milliseconds Jitter Max ' + $AverageJitterInMs.Maximum +' 1 Custom Milliseconds Packet reorder ratio ' + $PacketReorderRatio.Average +' 1 count Packet reorder ratio max ' + $PacketReorderRatio.Maximum +' 1 count ' #$prtgresult | out-file result.xml write-host "PRTG-SfBAssessment: Post Result to PRTG-Server" try { $Answer=Invoke-RestMethod ` -method "GET" ` -URI ($prtgserveruri + "?content=$prtgresult") if ($answer."Matching Sensors" -eq "1") { write-host "Found 1 Sensors OK" } else { write-Warning "Invalid reply" $answer # exit 1 } } catch { write-Warning "Unable to invoke-Restmethod $($_.Exception.Message)" } } write-host "PRTG-SfBAssessment:End"