Public/Get-MerakiOrganizationDevices.ps1

function Get-MerakiOrganizationDevices {
    <#
    .SYNOPSIS
    Retrieves a list of devices in an organization.
 
    .DESCRIPTION
    Retrieves a list of devices in an organization that meet the specified filter criteria.
 
    .PARAMETER AuthToken
    The Meraki API token to use for authentication.
 
    .PARAMETER OrgId
    The organization ID to retrieve devices for. If not specified, the ID of the first organization will be used.
 
    .PARAMETER perPage
    The number of devices to return per page. Maximum is 1000.
 
    .PARAMETER startingAfter
    The starting device serial number for the page of results.
 
    .PARAMETER endingBefore
    The ending device serial number for the page of results.
 
    .PARAMETER configurationUpdatedAfter
    The earliest configuration update time for the devices.
 
    .PARAMETER networkIds
    An array of network IDs to filter the devices by.
 
    .PARAMETER productTypes
    An array of product types to filter the devices by.
 
    .PARAMETER tags
    An array of tags to filter the devices by.
 
    .PARAMETER tagsFilterType
    The tag filter type to use. Valid values are "withAnyTags" and "withAllTags".
 
    .PARAMETER name
    The name of the device to filter by.
 
    .PARAMETER serial
    The serial number of the device to filter by.
 
    .PARAMETER model
    The model of the device to filter by.
 
    .PARAMETER macs
    An array of MAC addresses to filter the devices by.
 
    .PARAMETER serials
    An array of serial numbers to filter the devices by.
 
    .PARAMETER sensorMetrics
    An array of sensor metrics to filter the devices by.
 
    .PARAMETER sensorAlertProfileIds
    An array of sensor alert profile IDs to filter the devices by.
 
    .PARAMETER models
    An array of models to filter the devices by.
 
    .EXAMPLE
    PS C:\> Get-MerakiOrganizationDevices -AuthToken "1234" -OrgId "5678"
 
    Retrieves a list of devices in the organization with ID "5678".
 
    .NOTES
    For more information, see the Meraki API documentation:
    https://developer.cisco.com/meraki/api-v1/#!get-organizations-organizationId-devices
 
    .LINK
    https://developer.cisco.com/meraki/api-v1/#!get-organizations-organizationId-devices
    #>

    [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)]
        [string]$configurationUpdatedAfter = $null,
        [parameter(Mandatory=$false)]
        [array]$networkIds = $null,
        [parameter(Mandatory=$false)]
        [array]$productTypes = $null,
        [parameter(Mandatory=$false)]
        [array]$tags = $null,
        [parameter(Mandatory=$false)]
        [string]$tagsFilterType = $null,
        [parameter(Mandatory=$false)]
        [string]$name = $null,
        [parameter(Mandatory=$false)]
        [string]$serial = $null,
        [parameter(Mandatory=$false)]
        [string]$model = $null,
        [parameter(Mandatory=$false)]
        [array]$macs = $null,
        [parameter(Mandatory=$false)]
        [array]$serials = $null,
        [parameter(Mandatory=$false)]
        [array]$sensorMetrics = $null,
        [parameter(Mandatory=$false)]
        [array]$sensorAlertProfileIds = $null,
        [parameter(Mandatory=$false)]
        [array]$models = $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 ($configurationUpdatedAfter) {
                $queryParams['configurationUpdatedAfter'] = $configurationUpdatedAfter
            }
            if ($networkIds) {
                $queryParams['networkIds[]'] = $networkIds
            }
            if ($productTypes) {
                $queryParams['productTypes[]'] = $productTypes
            }
            if ($tags) {
                $queryParams['tags[]'] = $tags
            }
            if ($tagsFilterType) {
                $queryParams['tagsFilterType'] = $tagsFilterType
            }
            if ($name) {
                $queryParams['name'] = $name
            }
            if ($serial) {
                $queryParams['serial'] = $serial
            }
            if ($model) {
                $queryParams['model'] = $model
            }
            if ($macs) {
                $queryParams['macs[]'] = $macs
            }
            if ($serials) {
                $queryParams['serials[]'] = $serials
            }
            if ($sensorMetrics) {
                $queryParams['sensorMetrics[]'] = $sensorMetrics
            }
            if ($sensorAlertProfileIds) {
                $queryParams['sensorAlertProfileIds[]'] = $sensorAlertProfileIds
            }
            if ($models) {
                $queryParams['models[]'] = $models
            }
        
            $queryString = New-MerakiQueryString -queryParams $queryParams
        
            $URI = "https://api.meraki.com/api/v1/organizations/$OrganizationID/devices?$queryString"
            $response = Invoke-RestMethod -Method Get -Uri $URI -Header $header -UserAgent "MerakiPowerShellModule/1.0.2 DocNougat"
            return $response
        } catch {
            Write-Error $_
        }
    }
}