Для работы powershell скрипта необходим speedtest-cli, а также Python версии 2.4-3.5.

Скрипт тестирования скорости интернет для Icinga2:
```powershell
<#
icinga2scripts
Version 1.0
Description: Скрипт для Icinga 2 - Проверка скорости интернет
Pavel Satin (c) 2017
pslater.ru@gmail.com
#>
#[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$returnStateOK = 0
$returnStateWarning = 1
$returnStateCritical = 2
$returnStateUnknown = 3

#$ErrorActionPreference = "SilentlyContinue"


$down_speed_warn = [single]$args[0]
$down_speed_crit = [single]$args[1]
$up_speed_warn = [single]$args[2]
$up_speed_crit = [single]$args[3]



$spdtest = New-Object System.Diagnostics.ProcessStartInfo
$spdtest.FileName = "python.exe"
$spdtest.RedirectStandardError = $true
$spdtest.RedirectStandardOutput = $true
$spdtest.UseShellExecute = $false
$spdtest.Arguments = "c:\ProgramData\icinga2\scripts\icinga2\speedtest.py.ps1"
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $spdtest
$p.Start() | Out-Null
$p.WaitForExit()
$stdout = $p.StandardOutput.ReadToEnd()
$stderr = $p.StandardError.ReadToEnd()

#Write-Host "stdout: $stdout"
#Write-Host "stderr: $stderr"
#Write-Host "exit code: " + $p.ExitCode

#if ($stderr -ne $Null) {

#    $output = $stderr
#    $output += $stdout

#    Write-Host $output
    #[System.Environment]::Exit($returnStateCritical)

#} else {

    $stdout  | Out-File "c:\\ProgramData\\icinga2\\scripts\\icinga2\\speedtest-out.txt"

    foreach ($str in Get-Content "c:\\ProgramData\\icinga2\\scripts\\icinga2\\speedtest-out.txt")
    {
        if ($str -match 'Download:') {
            $downloadspeed = $str -split ": "

        } elseif ($str -match 'Upload:') {
            $uploadspeed = $str -split ": "

        } elseif ($str -match 'Hosted by ') {
            $pingresp = $str -split ": "

        }


    }

    $intDownloadspeed = [single]$downloadspeed[1].Split(" ")[0]
    $strDowloadUnit = [string]$downloadspeed[1].Split(" ")[1]
    $intUploadspeed = [single]$uploadspeed[1].Split(" ")[0]
    $strUploadUnit = [string]$uploadspeed[1].Split(" ")[1]
    $intPing = [single]$pingresp[1].Split(" ")[0]
    $strPingUnit = [string]$pingresp[1].Split(" ")[1]
    $strHostedBy = [string]$pingresp[0]



    $returnIconP = "IconInfoEncoded"


    if ($intDownloadspeed -ge $down_speed_warn) {
        $returnIconD = "IconSuccessEncoded"
        $returnState = $returnStateOK

    } elseif (($intDownloadspeed -lt $down_speed_warn) -AND ($intDownloadspeed -gt $down_speed_crit)) {
        $returnIconD = "IconWarningEncoded"
        $returnState = $returnStateWarning

    } elseif ($intDownloadspeed -le $down_speed_crit) {
        $returnIconD = "IconErrorEncoded"
        $returnState = $returnStateCritical

    }

    if ($intUploadspeed -ge $up_speed_warn) {
        $returnIconU = "IconSuccessEncoded"
        $returnState = $returnStateOK

    } elseif (($intUploadspeed -lt $up_speed_warn) -AND ($intUploadspeed -gt $up_speed_crit)) {
        $returnIconU = "IconWarningEncoded"
        $returnState = $returnStateWarning

    } elseif ($intUploadspeed -le $up_speed_crit) {
        $returnIconU = "IconErrorEncoded"
        $returnState = $returnStateCritical

    }


    #$output += "OK"
    $output += "<div class='plsatin-ps-style'><table>"
    $output += "<tr><td class='$returnIconD'></td><td>Download: </td><td>" + $intDownloadspeed + " " + $strDowloadUnit + "</td></tr>"
    $output += "<tr><td class='$returnIconU'></td><td>Upload: </td><td>" + $intUploadspeed + " " + $strUploadUnit + "</td></tr>"
    $output += "<tr><td class='$returnIconP'></td><td>Ping: </td><td>" + $intPing + " " + $strPingUnit +  "</td></tr>"
    $output +="</table>$strHostedBy</div>"
    $output += "|'download'=$intDownloadspeed;$down_speed_warn;$down_speed_crit"
    $output += " 'upload'=$intUploadspeed;$up_speed_warn;$up_speed_crit"
    $output += " 'ping'=$intPing;;"


    Write-Host $output
    [System.Environment]::Exit($returnState)

#}

```
Мониторинг

Подключаем к системе мониторинга Icinga2:

apply Service "speedtest" {
    max_check_attempts = 2
    check_interval = 60m
    retry_interval = 3m
    enable_perfdata = true

    assign where host.name == "dc01e.pshome.local"
    ignore where host.vars.os_family == "Linux"

    check_command = "powershell"
    vars.ps_command = "c:\\ProgramData\\icinga2\\scripts\\icinga2\\check_speedtest.ps1"
    vars.ps_args = [ "130", "100", "30", "20" ]
    command_endpoint = host.vars.client_endpoint
}

Ссылки