Public/Get-MerakiOrganizationApplianceVPNStats.ps1

function Get-MerakiOrganizationApplianceVPNStats {
    <#
    .SYNOPSIS
    Retrieves VPN statistics for a Meraki organization's appliances.
 
    .DESCRIPTION
    This function retrieves VPN statistics for a Meraki organization's appliances using the Meraki Dashboard API. It requires an authentication token for the API, and the ID of the organization for which the statistics should be retrieved. The function can also filter the results by specifying various optional parameters.
 
    .PARAMETER AuthToken
    The authentication token for the Meraki Dashboard API.
 
    .PARAMETER OrgId
    The ID of the organization for which the VPN statistics should be retrieved. If not specified, the function will use the ID of the first organization returned by the Get-MerakiOrganizations function.
 
    .PARAMETER perPage
    The number of entries per page to include in the result set. If not specified, all entries will be returned.
 
    .PARAMETER startingAfter
    Returns entries after the specified startingAfter parameter, sorted ascendingly by time.
 
    .PARAMETER endingBefore
    Returns entries before the specified endingBefore parameter, sorted ascendingly by time.
 
    .PARAMETER networkIds
    An array of network IDs to include in the result set. If not specified, statistics for all networks will be included.
 
    .PARAMETER t0
    The beginning of the timespan for which the statistics should be retrieved, in ISO 8601 format (e.g., "2021-01-01T00:00:00Z").
 
    .PARAMETER t1
    The end of the timespan for which the statistics should be retrieved, in ISO 8601 format.
 
    .PARAMETER timespan
    The duration of the timespan for which the statistics should be retrieved, in seconds. If this parameter is specified, t0 and t1 should not be used.
 
    .EXAMPLE
    PS C:\> Get-MerakiOrganizationApplianceVPNStats -AuthToken $AuthToken -OrgId $OrganizationID -networkIds @("N_1234567890")
 
    Retrieves VPN statistics for the specified organization and network ID.
 
    .NOTES
    This function requires the Get-MerakiOrganizations and New-MerakiQueryString functions.
 
    .LINK
    https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-stats
 
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory=$true)]
        [string]$AuthToken,
        [parameter(Mandatory=$false)]
        [string]$OrganizationID = (Get-OrgID -AuthToken $AuthToken),
        [parameter(Mandatory=$false)]
        [int]$perPage = $null,
        [parameter(Mandatory=$false)]
        [string]$startingAfter = $null,
        [parameter(Mandatory=$false)]
        [string]$endingBefore = $null,
        [parameter(Mandatory=$false)]
        [array]$networkIds = $null,
        [parameter(Mandatory=$false)]
        [string]$t0 = $null,
        [parameter(Mandatory=$false)]
        [string]$t1 = $null,
        [parameter(Mandatory=$false)]
        [int]$timespan = $null
    )
    If($OrganizationID -eq "Multiple organizations found. Please specify an organization ID.") {
        Return "Multiple organizations found. Please specify an organization ID."
    } else {
        try {
            $header = @{
                "X-Cisco-Meraki-API-Key" = $AuthToken
                "Content-Type" = "application/json"
            }
            $queryParams = @{}
            if ($timespan) {
                $queryParams['timespan'] = $timespan
            } else {
                if ($t0) {
                    $queryParams['t0'] = $t0
                }
                if ($t1) {
                    $queryParams['t1'] = $t1
                }
            }
            if ($perPage) {
                $queryParams['perPage'] = $perPage
            }
            if ($startingAfter) {
                $queryParams['startingAfter'] = $startingAfter
            }
            if ($endingBefore) {
                $queryParams['endingBefore'] = $endingBefore
            }
            if ($networkIds) {
                $queryParams['networkIds[]'] = $networkIds
            }    
            $queryString = New-MerakiQueryString -queryParams $queryParams    
            $URL = "https://api.meraki.com/api/v1/organizations/$OrganizationID/appliance/vpn/stats?$queryString"    
            $URI = [uri]::EscapeUriString($URL)    
            $response = Invoke-RestMethod -Method Get -Uri $URI -Header $header -UserAgent "MerakiPowerShellModule/1.0.2 DocNougat"
            return $response
        } catch {
        Write-Debug $_
        Throw $_
    }
    }
}