Public/Get-MerakiOrganizationFirmwareUpgradesByDevice.ps1

function Get-MerakiOrganizationFirmwareUpgradesByDevice {
    <#
    .SYNOPSIS
    Retrieves a list of devices with their firmware upgrade status for a specified Meraki organization.
 
    .DESCRIPTION
    This function retrieves a list of devices with their firmware upgrade status for a specified Meraki organization using the Meraki Dashboard API. The authentication token and organization ID are required for this operation. Optional parameters include the number of entries per page, pagination tokens, and filters for network IDs, device serials, MAC addresses, firmware upgrade IDs, and firmware upgrade batch IDs.
 
    .PARAMETER AuthToken
    Specifies the authentication token for the Meraki Dashboard API.
 
    .PARAMETER OrgId
    Specifies the ID of the Meraki organization. If not specified, the function will use the ID of the first organization returned by Get-MerakiOrganizations.
 
    .PARAMETER perPage
    Specifies the number of entries per page.
 
    .PARAMETER startingAfter
    Specifies the pagination token for the next page of results.
 
    .PARAMETER endingBefore
    Specifies the pagination token for the previous page of results.
 
    .PARAMETER networkIds
    Specifies an array of network IDs to filter the results.
 
    .PARAMETER serials
    Specifies an array of device serials to filter the results.
 
    .PARAMETER macs
    Specifies an array of device MAC addresses to filter the results.
 
    .PARAMETER firmwareUpgradeIds
    Specifies an array of firmware upgrade IDs to filter the results.
 
    .PARAMETER firmwareUpgradeBatchIds
    Specifies an array of firmware upgrade batch IDs to filter the results.
 
    .EXAMPLE
    PS C:\> Get-MerakiOrganizationFirmwareUpgradesByDevice -AuthToken "12345" -OrgId "123456" -perPage 100 -serials "Q2XX-XXXX-XXXX"
 
    Retrieves a list of devices with firmware upgrade status for the organization with ID "123456" using the authentication token "12345". The results are filtered by device serial number "Q2XX-XXXX-XXXX" and there are 100 results per page.
    #>

    [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)]
        [array]$serials = $null,
        [parameter(Mandatory=$false)]
        [array]$macs = $null,
        [parameter(Mandatory=$false)]
        [array]$firmwareUpgradeIds = $null,
        [parameter(Mandatory=$false)]
        [array]$firmwareUpgradeBatchIds = $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 ($perPage) {
                $queryParams['perPage'] = $perPage
            }
            if ($startingAfter) {
                $queryParams['startingAfter'] = $startingAfter
            }
            if ($endingBefore) {
                $queryParams['endingBefore'] = $endingBefore
            }
            if ($networkIds) {
                $queryParams['networkIds[]'] = $networkIds
            }
            if ($serials) {
                $queryParams['serials[]'] = $serials
            }
            if ($macs) {
                $queryParams['macs[]'] = $macs
            }
            if ($firmwareUpgradeIds) {
                $queryParams['firmwareUpgradeIds[]'] = $firmwareUpgradeIds
            }
            if ($firmwareUpgradeBatchIds) {
                $queryParams['firmwareUpgradeBatchIds[]'] = $firmwareUpgradeBatchIds
            }
        
            $queryString = New-MerakiQueryString -queryParams $queryParams
        
            $URI = "https://api.meraki.com/api/v1/organizations/$OrganizationID/firmware/upgrades/byDevice?$queryString"
            $response = Invoke-RestMethod -Method Get -Uri $URI -Header $header -UserAgent "MerakiPowerShellModule/1.0.2 DocNougat"
            return $response
        } catch {
        Write-Host $_
        Throw $_
    }
    }
}