---
updatedAt: 2025-08-14T13:33:23.000Z
agentTools:
  siteIndex: https://developer.n-able.com/llms.txt
  projectIndex: https://developer.n-able.com/n-central/llms.txt
---

# Internet Speed Test

```powershell AMP
<?xml version="1.0" encoding="UTF-8"?><Policy Description="VXNlcyBTcGVlZFRlc3QubmV0IENMSSB0b29s" ExecutionType="CurrentLoggedOnUser" ID="664ebb45-9034-4b50-be9e-666beb18fe4d" Name="Internet Speed Test" PS3ObjectCount="0" RemoteCategory="0" Version="2.0.3.107">
  <Object Data="&lt;xml&gt;&lt;Parameters&gt;&lt;Parameter ParameterName=&quot;tempfolder&quot; Label=&quot;Temp Folder&quot; ParameterType=&quot;string&quot; Value=&quot;C:\TEMP\&quot; /&gt;&lt;Parameter ParameterName=&quot;downloadURL&quot; Label=&quot;SpeedTest Executable Download URL&quot; ParameterType=&quot;string&quot; Value=&quot;https://github.com/zpeters/speedtest/releases/download/v0.8.6-c/&quot; /&gt;&lt;/Parameters&gt;&lt;OutputParameters&gt;&lt;Parameter ParameterName=&quot;lastServer&quot; Label=&quot;Last Server Used&quot; ParameterType=&quot;string&quot; Value=&quot;Run Script.lastserver&quot; /&gt;&lt;Parameter ParameterName=&quot;ping&quot; Label=&quot;Ping (ms)&quot; ParameterType=&quot;number&quot; Value=&quot;Run Script.ping&quot; /&gt;&lt;Parameter ParameterName=&quot;download&quot; Label=&quot;Download Speed (Kbps)&quot; ParameterType=&quot;number&quot; Value=&quot;Run Script.download&quot; /&gt;&lt;Parameter ParameterName=&quot;upload&quot; Label=&quot;Upload Speed (Kbps)&quot; ParameterType=&quot;number&quot; Value=&quot;Run Script.upload&quot; /&gt;&lt;/OutputParameters&gt;&lt;GlobalVariables&gt;&lt;Parameter ParameterName=&quot;arch&quot; Label=&quot;arch&quot; ParameterType=&quot;string&quot; Value=&quot;64&quot; /&gt;&lt;/GlobalVariables&gt;&lt;/xml&gt;" ID="{b0952870-4fc8-4b67-934a-bf294f2fd19b}" Type="{B6FA6D8B-EEAA-47A6-8463-7F9A4F5BBB6E}"/>
  <LinkManager xmlns="http://schemas.datacontract.org/2004/07/PolicyExecutor" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <hashset xmlns:d2p1="http://schemas.datacontract.org/2004/07/System">
      <d2p1:TupleOfstringstringstringstring>
        <d2p1:m_Item1>618d74a5-342f-4f7f-9e1d-6c0dfda9d6dc.upload</d2p1:m_Item1>
        <d2p1:m_Item2>OutputObject</d2p1:m_Item2>
        <d2p1:m_Item3/>
        <d2p1:m_Item4>upload</d2p1:m_Item4>
      </d2p1:TupleOfstringstringstringstring>
      <d2p1:TupleOfstringstringstringstring>
        <d2p1:m_Item1>618d74a5-342f-4f7f-9e1d-6c0dfda9d6dc.download</d2p1:m_Item1>
        <d2p1:m_Item2>OutputObject</d2p1:m_Item2>
        <d2p1:m_Item3/>
        <d2p1:m_Item4>download</d2p1:m_Item4>
      </d2p1:TupleOfstringstringstringstring>
      <d2p1:TupleOfstringstringstringstring>
        <d2p1:m_Item1>618d74a5-342f-4f7f-9e1d-6c0dfda9d6dc.ping</d2p1:m_Item1>
        <d2p1:m_Item2>OutputObject</d2p1:m_Item2>
        <d2p1:m_Item3/>
        <d2p1:m_Item4>ping</d2p1:m_Item4>
      </d2p1:TupleOfstringstringstringstring>
      <d2p1:TupleOfstringstringstringstring>
        <d2p1:m_Item1>618d74a5-342f-4f7f-9e1d-6c0dfda9d6dc.lastserver</d2p1:m_Item1>
        <d2p1:m_Item2>OutputObject</d2p1:m_Item2>
        <d2p1:m_Item3/>
        <d2p1:m_Item4>lastServer</d2p1:m_Item4>
      </d2p1:TupleOfstringstringstringstring>
    </hashset>
  </LinkManager>
  <Activity xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:p="clr-namespace:PolicyExecutor;assembly=PolicyExecutionEngine" xmlns:sads="http://schemas.microsoft.com/netfx/2010/xaml/activities/debugger" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" mc:Ignorable="sads sap" x:Class="Policy Builder">
    <x:Members>
      <x:Property Name="PolicyGUID" Type="InArgument(x:String)"/>
    </x:Members>
    <sap:VirtualizedContainerService.HintSize>556,3062</sap:VirtualizedContainerService.HintSize>
    <mva:VisualBasic.Settings>Assembly references and imported namespaces serialized as XML namespaces</mva:VisualBasic.Settings>
    <p:PolicySequence DisplayName="Policy" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" sap:VirtualizedContainerService.HintSize="556,3062">
      <p:PolicySequence.Activities>
        <p:GetOSArchitecture AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Get OS Architecture" Moniker="a58f39b2-d284-4bb3-be94-d92327968263" Result="[GetOSArchitecture_Result_96]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="ExecuteDebug" TypeName="GetOSArchitecture" Value="[GetOSArchitecture_Value_95]" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="520,81"/>
        <p:IfElse AssemblyName="PolicyExecutionEngine, Version=2.0.3.107, Culture=neutral, PublicKeyToken=null" Condition="contains" Condition_DisplayArg="contains" Condition_Item="{x:Null}" Condition_ItemProp="{x:Null}" DisplayName="If/Else" Moniker="beeba5e2-ddb8-49cc-8bdb-d6d6f18020d4" Result="[IfElse_Result_97]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="None" TypeName="IfElse" Value_DisplayArg="64" Value_Item="{x:Null}" Value_ItemProp="{x:Null}" Value_Type="x:String" Variable="[GetOSArchitecture_Value_95]" Variable_DisplayArg="Get OS Architecture.Value" Variable_Item="{x:Null}" Variable_ItemProp="{x:Null}" Variable_Type="x:String" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="520,877">
          <p:IfElse.ElseOption>
            <p:SequenceActivity DisplayName="Else" Name="SequenceActivity" sap:VirtualizedContainerService.HintSize="382,332">
              <p:SequenceActivity.Activities>
                <p:Assignment AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Global Variable Assignment" Moniker="77815177-22d9-4554-852c-487eda9a7b88" Result="[Assignment_Result_101]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="None" TypeName="Assignment" Value_DisplayArg="32" Value_Item="{x:Null}" Value_ItemProp="{x:Null}" Value_Type="x:String" Variable="[arch]" Variable_DisplayArg="Global Variables.arch" Variable_Item="{x:Null}" Variable_ItemProp="{x:Null}" Variable_Type="x:String" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="344,182">
                  <p:Assignment.Value>
                    <InArgument x:TypeArguments="x:Object">
                      <p:ObjectLiteral Value="32"/>
                    </InArgument>
                  </p:Assignment.Value>
                </p:Assignment>
              </p:SequenceActivity.Activities>
              <p:SequenceActivity.Variables>
                <Variable Name="Assignment_Result_101" x:TypeArguments="x:Double"/>
              </p:SequenceActivity.Variables>
            </p:SequenceActivity>
          </p:IfElse.ElseOption>
          <p:IfElse.IfOption>
            <p:SequenceActivity DisplayName="Then" Name="SequenceActivity" sap:VirtualizedContainerService.HintSize="382,332">
              <p:SequenceActivity.Activities>
                <p:Assignment AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Global Variable Assignment" Moniker="dcb302bd-1bb3-4c53-83ac-39cefda7ac9d" Result="[Assignment_Result_99]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="None" TypeName="Assignment" Value_DisplayArg="64" Value_Item="{x:Null}" Value_ItemProp="{x:Null}" Value_Type="x:String" Variable="[arch]" Variable_DisplayArg="Global Variables.arch" Variable_Item="{x:Null}" Variable_ItemProp="{x:Null}" Variable_Type="x:String" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="344,182">
                  <p:Assignment.Value>
                    <InArgument x:TypeArguments="x:Object">
                      <p:ObjectLiteral Value="64"/>
                    </InArgument>
                  </p:Assignment.Value>
                </p:Assignment>
              </p:SequenceActivity.Activities>
              <p:SequenceActivity.Variables>
                <Variable Name="Assignment_Result_99" x:TypeArguments="x:Double"/>
              </p:SequenceActivity.Variables>
            </p:SequenceActivity>
          </p:IfElse.IfOption>
          <p:IfElse.Value>
            <InArgument x:TypeArguments="x:Object">
              <p:ObjectLiteral Value="64"/>
            </InArgument>
          </p:IfElse.Value>
        </p:IfElse>
        <p:FormatString AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Format String - executable" FormattedString="[FormatString_FormattedString_102]" Input0="[arch]" Input0_DisplayArg="Global Variables.arch" Input0_Item="{x:Null}" Input0_ItemProp="{x:Null}" Input1="{x:Null}" Input1_DisplayArg="{x:Null}" Input1_Item="{x:Null}" Input1_ItemProp="{x:Null}" Moniker="f7b1b6c8-e0b5-4ecb-aee0-327d88451bbb" Result="[FormatString_Result_103]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="ExecuteDebug" Text="speedtest-{0}-v0.8.6-c.exe" Text_DisplayArg="speedtest-{0}-v0.8.6-c.exe" Text_Item="{x:Null}" Text_ItemProp="{x:Null}" TypeName="FormatString" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="520,160"/>
        <p:FormatString AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Format String - Local Path" FormattedString="[FormatString_FormattedString_104]" Input0="[tempfolder]" Input0_DisplayArg="Input Parameters.Temp Folder" Input0_Item="{x:Null}" Input0_ItemProp="{x:Null}" Input1="[FormatString_FormattedString_102]" Input1_DisplayArg="Format String - executable.FormattedString" Input1_Item="{x:Null}" Input1_ItemProp="{x:Null}" Moniker="f235a2f6-ce8a-4182-ac30-10e86cf6a6c7" Result="[FormatString_Result_105]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="ExecuteDebug" Text="{}{0}{1}" Text_DisplayArg="{}{0}{1}" Text_Item="{x:Null}" Text_ItemProp="{x:Null}" TypeName="FormatString" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="520,160"/>
        <p:FileExists AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" Conditional="[FileExists_Conditional_106]" DisplayName="File Exists" File="[FormatString_FormattedString_104]" File_DisplayArg="Format String - Local Path.FormattedString" File_Item="{x:Null}" File_ItemProp="{x:Null}" Moniker="341dcd61-e406-4eec-9b5a-3ea7f3f5a449" Result="[FileExists_Result_107]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="ExecuteDebug" TypeName="FileExists" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="520,88"/>
        <p:IfObject AssemblyName="PolicyExecutionEngine, Version=2.0.3.107, Culture=neutral, PublicKeyToken=null" Condition="equals" Condition_DisplayArg="equals" Condition_Item="{x:Null}" Condition_ItemProp="{x:Null}" DisplayName="If" Moniker="dbfc675d-b03c-4e8f-b2c6-df52dfc81ed0" Result="[IfObject_Result_108]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="None" TypeName="IfObject" Value_DisplayArg="False" Value_Item="{x:Null}" Value_ItemProp="{x:Null}" Value_Type="x:String" Variable="[FileExists_Conditional_106]" Variable_DisplayArg="File Exists.Conditional" Variable_Item="{x:Null}" Variable_ItemProp="{x:Null}" Variable_Type="x:String" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="520,711">
          <p:IfObject.IfOption>
            <p:SequenceActivity DisplayName="Then" Name="SequenceActivity" sap:VirtualizedContainerService.HintSize="488,510">
              <p:SequenceActivity.Activities>
                <p:FormatString AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Format String - downloadURL" FormattedString="[FormatString_FormattedString_109]" Input0="[downloadURL]" Input0_DisplayArg="Input Parameters.SpeedTest Executable Download URL" Input0_Item="{x:Null}" Input0_ItemProp="{x:Null}" Input1="[FormatString_FormattedString_102]" Input1_DisplayArg="Format String - executable.FormattedString" Input1_Item="{x:Null}" Input1_ItemProp="{x:Null}" Moniker="d7f3a32c-7e4f-45ba-b2ed-5984505d1424" Result="[FormatString_Result_110]" RunAsCurrentLoggedOnUser="False" ScriptExecutionMethod="ExecuteDebug" Text="{}{0}{1}" Text_DisplayArg="{}{0}{1}" Text_Item="{x:Null}" Text_ItemProp="{x:Null}" TypeName="FormatString" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="450,160"/>
                <p:DownloadFileFromURL AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Download File from URL" Moniker="ea53f0c9-97ec-4d31-b120-5bfc6b92fa9c" OverwriteExistingFile="True" OverwriteExistingFile_DisplayArg="true" OverwriteExistingFile_Item="{x:Null}" OverwriteExistingFile_ItemProp="{x:Null}" RemoteFileURL="[FormatString_FormattedString_109]" RemoteFileURL_DisplayArg="Format String - downloadURL.FormattedString" RemoteFileURL_Item="{x:Null}" RemoteFileURL_ItemProp="{x:Null}" Result="[DownloadFileFromURL_Result_111]" RunAsCurrentLoggedOnUser="False" SaveAsFileName="[FormatString_FormattedString_104]" SaveAsFileName_DisplayArg="Format String - Local Path.FormattedString" SaveAsFileName_Item="{x:Null}" SaveAsFileName_ItemProp="{x:Null}" ScriptExecutionMethod="ExecuteDebug" TypeName="DownloadFileFromURL" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="450,160"/>
              </p:SequenceActivity.Activities>
              <p:SequenceActivity.Variables>
                <Variable Name="FormatString_FormattedString_109" x:TypeArguments="x:String"/>
                <Variable Name="FormatString_Result_110" x:TypeArguments="x:Double"/>
                <Variable Name="DownloadFileFromURL_Result_111" x:TypeArguments="x:Double"/>
              </p:SequenceActivity.Variables>
            </p:SequenceActivity>
          </p:IfObject.IfOption>
          <p:IfObject.Value>
            <InArgument x:TypeArguments="x:Object">
              <p:ObjectLiteral Value="False"/>
            </InArgument>
          </p:IfObject.Value>
        </p:IfObject>
        <p:RunScript AssemblyName="PolicyExecutionEngine, Version=1.7.2.53, Culture=neutral, PublicKeyToken=null" DisplayName="Run Script" Moniker="618d74a5-342f-4f7f-9e1d-6c0dfda9d6dc" OutPut_64="[RunScript_OutPut_64]" Result="[RunScript_Result]" ResultString="[RunScript_ResultString]" Results_x64="[RunScript_Results_x64]" RunAsCurrentLoggedOnUser="True" ScriptExecutionMethod="ExecuteDebug" TypeName="RunScript" genArgEvent="053d2ed1-c185-4986-ab97-e491cc8daf3e" m_bTextLinkChange="False" sap:VirtualizedContainerService.HintSize="520,522" script="JHNwZWVkdGVzdG91dHB1dCA9IGNtZCAvYyAgJCVpZCVsb2NhbFBhdGglaWQlIC1yIDJgPmAmMQ0KDQokYXJyYXkgPSAkc3BlZWR0ZXN0b3V0cHV0LlNwbGl0KCd8JykNCiQlaWQlcGluZyVpZCUgPSAkYXJyYXlbM10NCiQlaWQlZG93bmxvYWQlaWQlPSAkYXJyYXlbNF0NCiQlaWQldXBsb2FkJWlkJT0gJGFycmF5WzVdDQokJWlkJWxhc3RzZXJ2ZXIlaWQlPSAkYXJyYXlbMV0gKyAiIHwgIiArICRhcnJheVsyXQ==">
          <p:RunScript.InArgs>
            <p:InArg ArgType="string" DisplayArg="Format String - Local Path.FormattedString" DisplayName="Local Path" Item="{x:Null}" ItemProp="{x:Null}" Name="localPath" isRequired="True" x:Key="localPath">
              <p:InArg.Arg>
                <InArgument x:TypeArguments="x:String">[FormatString_FormattedString_104]</InArgument>
              </p:InArg.Arg>
            </p:InArg>
          </p:RunScript.InArgs>
          <p:RunScript.OutArgs>
            <p:OutArg ArgType="number" DisplayName="ping" Name="ping" x:Key="ping">
              <p:OutArg.Arg>
                <OutArgument x:TypeArguments="x:Double">[RunScript_ping_116]</OutArgument>
              </p:OutArg.Arg>
            </p:OutArg>
            <p:OutArg ArgType="number" DisplayName="download" Name="download" x:Key="download">
              <p:OutArg.Arg>
                <OutArgument x:TypeArguments="x:Double">[RunScript_download_117]</OutArgument>
              </p:OutArg.Arg>
            </p:OutArg>
            <p:OutArg ArgType="number" DisplayName="upload" Name="upload" x:Key="upload">
              <p:OutArg.Arg>
                <OutArgument x:TypeArguments="x:Double">[RunScript_upload_118]</OutArgument>
              </p:OutArg.Arg>
            </p:OutArg>
            <p:OutArg ArgType="string" DisplayName="lastserver" Name="lastserver" x:Key="lastserver">
              <p:OutArg.Arg>
                <OutArgument x:TypeArguments="x:String">[RunScript_lastserver_119]</OutArgument>
              </p:OutArg.Arg>
            </p:OutArg>
          </p:RunScript.OutArgs>
        </p:RunScript>
      </p:PolicySequence.Activities>
      <p:PolicySequence.Variables>
        <Variable Name="GetOSArchitecture_Value_95" x:TypeArguments="x:String"/>
        <Variable Name="GetOSArchitecture_Result_96" x:TypeArguments="x:Double"/>
        <Variable Name="IfElse_Result_97" x:TypeArguments="x:Double"/>
        <Variable Default="64" Name="arch" x:TypeArguments="x:String"/>
        <Variable Name="FormatString_FormattedString_102" x:TypeArguments="x:String"/>
        <Variable Name="FormatString_Result_103" x:TypeArguments="x:Double"/>
        <Variable Name="FormatString_FormattedString_104" x:TypeArguments="x:String"/>
        <Variable Name="FormatString_Result_105" x:TypeArguments="x:Double"/>
        <Variable Name="FileExists_Conditional_106" x:TypeArguments="x:String"/>
        <Variable Name="FileExists_Result_107" x:TypeArguments="x:Double"/>
        <Variable Name="IfObject_Result_108" x:TypeArguments="x:Double"/>
        <Variable Name="RunScript_ping_116" x:TypeArguments="x:Double"/>
        <Variable Name="RunScript_download_117" x:TypeArguments="x:Double"/>
        <Variable Name="RunScript_upload_118" x:TypeArguments="x:Double"/>
        <Variable Name="RunScript_lastserver_119" x:TypeArguments="x:String"/>
        <Variable Name="RunScript_OutPut_64" x:TypeArguments="x:String"/>
        <Variable Name="RunScript_ResultString" x:TypeArguments="x:String"/>
        <Variable Name="RunScript_Results_x64" x:TypeArguments="scg:IEnumerable(x:Object)"/>
        <Variable Name="RunScript_Result" x:TypeArguments="x:Double"/>
        <Variable Default="C:\TEMP\" Name="tempfolder" x:TypeArguments="x:String"/>
        <Variable Default="https://github.com/zpeters/speedtest/releases/download/v0.8.6-c/" Name="downloadURL" x:TypeArguments="x:String"/>
      </p:PolicySequence.Variables>
    </p:PolicySequence>
  </Activity>
</Policy>
```

```json Response Example
{"success":true}
```

# Define Parameters

<!-- powershell@1-5 -->

This step sets up the necessary parameters for the script, including:

Temp Folder: Specifies where temporary files will be stored (e.g., C:\TEMP\).

Download URL: The link from which the speed test executable will be downloaded.

# Output Parameters Setup

<!-- powershell@6-10 -->

Here, the script defines the output parameters that will capture the results of the speed test:

Last Server Used: Stores the last server that was used for the test.

Ping: Measures the latency in milliseconds.

Download Speed: Records the download speed in Kbps.

Upload Speed: Records the upload speed in Kbps.

# Check OS Architecture

<!-- powershell@11-13 -->

This step determines whether the operating system is 32-bit or 64-bit. This information is crucial for downloading the correct version of the speed test executable.

# Verify Executable Presence

<!-- powershell@14-16 -->

The script checks if the speed test executable already exists in the specified temp folder. This prevents unnecessary downloads if the file is already available.

# Download Executable

<!-- powershell@17-19 -->

If the executable is not found, the script downloads it from the specified URL. This ensures that the latest version of the speed test tool is used.

# Run Speed Test

<!-- powershell@20-22 -->

After ensuring the executable is available, the script runs the speed test. It captures the results, including ping, download speed, upload speed, and the last server used.

# Store Results

<!-- powershell@23-25 -->

Finally, the script stores the results of the speed test in the defined output parameters, making them available for further use or reporting.