Private/Helper/Start-PSPing.ps1

<#
Copyright © 2024 Integris. For internal company use only. All rights reserved.
#>


FUNCTION Start-PSPing {
    <#
    .SYNOPSIS
    Pings a specified address and returns the results.
 
    .DESCRIPTION
    This function sends ICMP echo requests to a specified address and returns the results, including address, buffer size, latency, and status.
 
    .PARAMETER Address
    The address to ping.
 
    .PARAMETER Count
    The number of echo requests to send. Default is 4.
 
    .PARAMETER Delay
    The delay in seconds between each echo request. Default is 3 seconds.
 
    .EXAMPLE
    Start-PSPing -Address "8.8.8.8" -Count 5 -Delay 2
 
    .NOTES
    The function uses Test-Connection to perform the ping and handles errors gracefully.
    #>


    PARAM (
        [Parameter(Mandatory)]
        $Address,
        $Count = 4,
        $Delay = 3
    )

    $Results = @()

    TRY {
        $Results = Test-Connection $Address -Count $Count -Delay $Delay -ErrorAction SilentlyContinue | Select-Object -Property Address, BufferSize,
            @{name='Latency'; e={
                if ($null -eq $_.Latency) { $_.ResponseTime}else{ $_.Latency}}
            },
            @{name='Status'; e={
                if ($null -eq $_.Status) {
                    if ($_.StatusCode -eq 0) {'Success'}else {'Not Success'}
                }else {
                    $_.Status
                }
            }
        }
    }
    CATCH {
        $Results = New-Object PSObject -WarningAction SilentlyContinue -Property @{
            Address = $Address
            BufferSize = ""
            Latency = ""
            Status = "Address Not Resolved"
        }
    }

    IF ($Results.Count -eq 0) {
        $Results = New-Object PSObject -WarningAction SilentlyContinue -Property @{
            Address = $Address
            BufferSize = ""
            Latency = ""
            Status = "Address Not Resolved"
        }
    }

    RETURN $Results | Select-Object -Property Address, BufferSize, Latency, Status
}