Public/Test-StoreNetwork.ps1

Function Test-StoreNetwork {
    <#
.SYNOPSIS
    Tests a stores network elements to determine functionality
 
.NOTES
    Name: Test-StoreNetwork
    Author: Luke Hagar
    Version: 1.0
    DateCreated: January 20th, 2021
 
.EXAMPLE
    Test-StoreNetwork -Store SWBEE
 
.EXAMPLE
    Test-StoreNetwork -Store SWBEE -a
 
.LINK
     
#>

    
    [CmdletBinding()]
    param (
        [Parameter(
            Mandatory = $false,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true,
            Position = 0
        )]
        [Alias('physicalDeliveryOfficeName')]
        [String]$Store,
        [switch]
        $a
    )
    
    BEGIN {
        $StoreElements = @("SW1", "SW2", "SW3", "RTR", "KRON", "WLC1", "FS1", "SS1" , "AP1", "AP2", "AP3", "AP4", "AP5", "AP6", "AP7", "AP8", "AP9", "AP10", "AP11", "AP12", "AP13", "AP14", "AP15", "AP16", "AP17", "AP18", "AP19", "AP20", "AP21", "AP22", "AP23", "AP24", "AP25", "AP26", "AP27", "AP28", "AP29", "AP30")
        $TestConnectionBlock = { 
            param (
                $Element,
                $Location
            )
            If ($Test = Test-Connection "$Location-$Element" -Count 1 -ErrorAction SilentlyContinue | Select-Object Address, IPV4Address, ResponseTime) {
                [PSCustomObject]@{
                    Store        = $Location
                    HostName     = "$Location-$Element"
                    IPV4Address  = $Test.IPV4Address
                    ResponseTime = $Test.ResponseTime
                }
            }
            Else {
                [PSCustomObject]@{
                    Store        = $Location
                    HostName     = "$Location-$Element"
                    IPV4Address  = "Offline"
                    ResponseTime = "Offline"
                }
            } }
    }
    
    PROCESS {
        $JobList = @()
        $Location = $Store.Replace(' ', '')
        Foreach ($Element in $StoreElements) {
            Write-Verbose "Starting Job for $Location-$Element"
            $JobList += Start-Job -ScriptBlock $TestConnectionBlock -ArgumentList $Element.ToUpper(), $Location.ToUpper()
        }
        Write-Verbose "Waiting on Jobs"
        $JobList | Get-Job | Wait-Job | Out-Null
        Write-Verbose "Receiving Jobs"
        $Results = $JobList | Get-Job | Receive-Job | Select-Object Store, HostName, IPV4Address, ResponseTime
        Write-Verbose "Outputting Results"
        if ($a) {
            Return $Results | Format-Table -AutoSize
        }
        else {
            Return $Results
        }
    }
    END { }
}