Public/Get-MerakiNetworkClientsApplicationUsage.ps1

function Get-MerakiNetworkClientsApplicationUsage {
    <#
    .SYNOPSIS
    Retrieve the application usage history for clients on a network.
 
    .DESCRIPTION
    Use this API endpoint to get the application usage history for clients on a network. Clients can be identified by their MAC address or their IP address.
 
    .PARAMETER AuthToken
    The API key for the Meraki dashboard.
 
    .PARAMETER networkId
    The ID of the network.
 
    .PARAMETER clients
    The MAC or IP address of the client(s). Multiple clients can be specified by separating them with a comma.
 
    .PARAMETER ssidNumber
    The index of the SSID to query. This parameter is only valid for Wi-Fi networks.
 
    .PARAMETER perPage
    The number of entries per page returned. Maximum value is 1000.
 
    .PARAMETER startingAfter
    A token used to retrieve the next page of results. This is obtained from the "next" property in the response.
 
    .PARAMETER endingBefore
    A token used to retrieve the previous page of results. This is obtained from the "previous" property in the response.
 
    .PARAMETER t0
    The beginning of the timespan for the data. This can be a timestamp or an ISO 8601 formatted datetime string (YYYY-MM-DDTHH:MM:SSZ).
 
    .PARAMETER t1
    The end of the timespan for the data. This can be a timestamp or an ISO 8601 formatted datetime string (YYYY-MM-DDTHH:MM:SSZ).
 
    .PARAMETER timespan
    The timespan for which the data should be fetched, in seconds. The maximum value is 2678400 seconds (31 days).
 
    .EXAMPLE
    PS C:\> Get-MerakiNetworkClientsApplicationUsage -AuthToken $AuthToken -networkId $NetworkId -clients "00:11:22:33:44:55" -ssidNumber 1 -timespan 86400
 
    This command retrieves the application usage history for the client with MAC address "00:11:22:33:44:55" on the network with ID $NetworkId. It filters the results to only show data for SSID 1 and a timespan of 24 hours.
 
    .EXAMPLE
    PS C:\> Get-MerakiNetworkClientsApplicationUsage -AuthToken $AuthToken -networkId $NetworkId -clients "192.168.1.10,192.168.1.20" -perPage 1000
 
    This command retrieves the application usage history for the clients with IP addresses "192.168.1.10" and "192.168.1.20" on the network with ID $NetworkId. It returns up to 1000 entries per page.
 
    .NOTES
    For more information, see the Meraki API documentation: https://developer.cisco.com/meraki/api-v1/#!get-network-clients-application-usage
 
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory=$true)]
        [string]$AuthToken,
        [parameter(Mandatory=$true)]
        [string]$networkId,
        [parameter(Mandatory=$true)]
        [string]$clients,
        [parameter(Mandatory=$false)]
        [int]$ssidNumber = $null,
        [parameter(Mandatory=$false)]
        [int]$perPage = $null,
        [parameter(Mandatory=$false)]
        [string]$startingAfter = $null,
        [parameter(Mandatory=$false)]
        [string]$endingBefore = $null,
        [parameter(Mandatory=$false)]
        [string]$t0 = $null,
        [parameter(Mandatory=$false)]
        [string]$t1 = $null,
        [parameter(Mandatory=$false)]
        [int]$timespan = $null
    )
    try {
        $header = @{
            "X-Cisco-Meraki-API-Key" = $AuthToken
        }
        $queryParams = @{}
        $queryParams['clients'] = $clients
    
        if ($ssidNumber) {
            $queryParams['ssidNumber'] = $ssidNumber
        }
        if ($perPage) {
            $queryParams['perPage'] = $perPage
        }
        if ($startingAfter) {
            $queryParams['startingAfter'] = $startingAfter
        }
        if ($endingBefore) {
            $queryParams['endingBefore'] = $endingBefore
        }
        if ($timespan) {
            $queryParams['timespan'] = $timespan
        } else {
            if ($t0) {
                $queryParams['t0'] = $t0
            }
            if ($t1) {
                $queryParams['t1'] = $t1
            }
        }
    
        $queryString = New-MerakiQueryString -queryParams $queryParams
    
        $URL = "https://api.meraki.com/api/v1/networks/$networkId/clients?$queryString"
    
        $URI = [uri]::EscapeUriString($URL)
    
        $response = Invoke-RestMethod -Method Get -Uri $URI -Header $header -UserAgent "MerakiPowerShellModule/1.0.2 DocNougat"
        return $response
    } catch {
        Write-Error $_
    }
}