PSCiscoMeraki.psm1
function Get-MerakiAccessPolicy { <# .SYNOPSIS Short function to provide details for an access policy configured on a specific network ID. Only valid for MS networks. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for an access policy configured on a specific network ID. Only valid for MS networks. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiNetworks -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere Only valid for MS networks. .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "number": 1, "name": "My access policy", "accessType": "8021.x", "guestVlan": 3700, "radiusServers": [ { "ip": "1.2.3.4", "port": 1337 }, { "ip": "2.3.4.5", "port": 1337 } ] } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "accessPolicies" = "https://api.meraki.com/api/v0/networks/$NetworkID/accessPolicies" } $accessPolicies = Invoke-RestMethod -Method GET -Uri $Uri.accessPolicies -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $accessPolicies ) { $Settings = $item | Select-Object -Property * try { $accessPoliciesProperties = @{ number = $Settings.number name = $Settings.name accessType = $Settings.accessType guestVlan = $Settings.guestVlan radiusServers = $Settings.radiusServers } } catch { $accessPoliciesProperties = @{ number = $Settings.number name = $Settings.name accessType = $Settings.accessType guestVlan = $Settings.guestVlan radiusServers = $Settings.radiusServers } } finally { $obj = New-Object -TypeName PSObject -Property $accessPoliciesProperties Write-Output $obj } } } END { } } function Get-MerakiAdminList { <# .SYNOPSIS Short function to list organizations admin users which will be needed to use with other commands within this module. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to output your Meraki Organisation ID which you will need in order to use with other commands within this module. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Export your companies ID, Name and SAML Url's Get-MerakiOrganisation.ps1 -ApiKey "YourApiKeyGoesHere" .EXAMPLE $key = "YourApiKeyGoesHere" Get-MerakiOrganisation.ps1 -ApiKey $key This example will enable you to Export your companies ID, Name and SAML Url's by piping in your Api Key .EXAMPLE $key = "YourApiKeyGoesHere" $CompanyID = "YourCompanyIDGoesHere" Get-MerakiOrganisation.ps1 -ApiKey $key -OrganisationID $CompanyID Export your company information (ID, Name and SAML Url's) by piping in your Api Key and specifying the Comapny ID .EXAMPLE $key = "YourApiKeyGoesHere" $orgID = "515085" $Admins = .\MerakiModule\Get-MerakiAdminList.ps1 -ApiKey $key -OrganisationID $orgID $Admins | Sort-Object Name | Select-Object -Property * | Format-List Export alpabetised Admin User List from your Meraki by piping in your Api Key, Organisation ID .EXAMPLE $key = "YourApiKeyGoesHere" $CompanyID = "YourCompanyIDGoesHere" Get-MerakiOrganisation.ps1 -ApiKey $key -OrganisationID $CompanyID | Format-List -Property * Export your company information (ID, Name and SAML Url's) by piping in your Api Key and specifying the Comapny ID .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "name": "Miles Meraki", "email": "miles+test@meraki.com", "id": "646829496481123357", "networks": [], "tags": [ { "tag": "Sandbox", "access": "full" } ], "orgAccess": "read-only" }, { "name": "adminstrator123", "email": "administrator123@ikarem.com", "id": "646829496481136255", "networks": [], "tags": [], "orgAccess": "read-only" } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $false, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "admins" = "https://api.meraki.com/api/v0/organizations/$OrganisationID/admins" } $admins = Invoke-RestMethod -Method GET -Uri $Uri.admins -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $admins ) { $Settings = $item | Select-Object -Property * try { $adminProperties = @{ name = $Settings.name email = $Settings.email id = $Settings.id networks = $Settings.networks tags = $Settings.tags orgAccess = $Settings.orgAccess } } catch { $adminProperties = @{ name = $Settings.name email = $Settings.email id = $Settings.id networks = $Settings.networks tags = $Settings.tags orgAccess = $Settings.orgAccess } } finally { $obj = New-Object -TypeName PSObject -Property $adminProperties Write-Output $obj } } } END { } } function Get-MerakiAirMarshall { <# .SYNOPSIS Short function to provide details for an access policy configured on a specific network ID. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for an access policy configured on a specific network ID This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiNetworks -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "ssid": "linksys", "bssids": [ { "bssid": "00:11:22:33:44:55", "contained": false, "detectedBy": [ { "device": "Q234-ABCD-5678", "rssi": 17 } ] } ], "channels": [ 36, 40 ], "firstSeen": 1518365681, "lastSeen": 1526087474, "wiredMacs": [ "00:11:22:33:44:55" ], "wiredVlans": [ 0, 108 ], "wiredLastSeen": 1526087474 } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your time span in seconds (e.g. 3600). Must be a maximum of one month in seconds.")] [Alias('TS')] [string]$TimeSpan ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "timespan" = "https://api.meraki.com/api/v0/networks/$NetworkID/airMarshal?timespan=$TimeSpan" } $timespaned = Invoke-RestMethod -Method GET -Uri $Uri.timespan -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $timespaned ) { $Settings = $item | Select-Object -Property * try { $timespanProperties = @{ ssid = $Settings.ssid bssids = $Settings.bssids channels = $Settings.channels firstSeen = $Settings.firstSeen lastSeen = $Settings.lastSeen wiredMacs = $Settings.wiredMacs wiredVlans = $Settings.wiredVlans wiredLastSeen = $Settings.wiredLastSeen } } catch { $timespanProperties = @{ ssid = $Settings.ssid bssids = $Settings.bssids channels = $Settings.channels firstSeen = $Settings.firstSeen lastSeen = $Settings.lastSeen wiredMacs = $Settings.wiredMacs wiredVlans = $Settings.wiredVlans wiredLastSeen = $Settings.wiredLastSeen } } finally { $obj = New-Object -TypeName PSObject -Property $timespanProperties Write-Output $obj } } } END { } } function Get-MerakiBluetooth { <# .SYNOPSIS Short function to provide details for Bluetooth settings configured on the Meraki Devices. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for Bluetooth settings configured on the Meraki Devices. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiBluetooth -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere Description ----------- This command connects to the Meraki API and performs a Get .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. { "scanningEnabled": true, "advertisingEnabled": true, "uuid": "95bba6e5-c32d-446b-fake-aebd4c62888d", "majorMinorAssignmentMode": "Non-unique", "major": 0, "minor": 0 } You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "bluetoothSettings" = "https://api.meraki.com/api/v0/networks/$NetworkID/bluetoothSettings" } $bluetoothSettings = Invoke-RestMethod -Method GET -Uri $Uri.bluetoothSettings -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $bluetoothSettings ) { $Settings = $item | Select-Object -Property * try { $bluetoothSettingsProperties = @{ scanningEnabled = $Settings.scanningEnabled advertisingEnabled = $Settings.advertisingEnabled uuid = $Settings.uuid majorMinorAssignmentMode = $Settings.majorMinorAssignmentMode major = $Settings.major minor = $Settings.minor type = $Settings.type } } catch { $bluetoothSettingsProperties = @{ scanningEnabled = $Settings.scanningEnabled advertisingEnabled = $Settings.advertisingEnabled uuid = $Settings.uuid majorMinorAssignmentMode = $Settings.majorMinorAssignmentMode major = $Settings.major minor = $Settings.minor type = $Settings.type } } finally { $obj = New-Object -TypeName PSObject -Property $bluetoothSettingsProperties Write-Output $obj } } } END { } } function Get-MerakiDeviceInventory { <# .SYNOPSIS Short function to provide an inventory of all Meraki Devices. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide an inventory of all Meraki Devices. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "mac": "00:18:0a:4e:78:0c", "serial": "Q2JN-QP7J-VW8J", "networkId": "L_694117292568478178", "model": "MX100", "claimedAt": "1476691740.28085", "publicIp": "194.74.170.115" }, { "mac": "00:18:0a:6f:70:eb", "serial": "Q2GD-6M6C-QBMK", "networkId": "L_694117292568478178", "model": "MR18", "claimedAt": "1457009523.49881", "publicIp": "194.74.170.115" }, { "mac": "0c:8d:db:5e:34:42", "serial": "Q2QD-PDZR-X93A", "networkId": "L_694117292568478178", "model": "MR74", "claimedAt": "1496310866.85687", "publicIp": "194.74.170.115" } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "inventory" = "https://api.meraki.com/api/v0/organizations/$OrganisationID/inventory" } $inventory = Invoke-RestMethod -Method GET -Uri $Uri.inventory -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $inventory ) { $Device = $item | Select-Object -Property * try { $DeviceProperties = @{ mac = $Device.mac serial = $Device.serial networkId = $Device.networkId model = $Device.model claimedAt = $Device.claimedAt publicIp = $Device.publicIp } } catch { $DeviceProperties = @{ mac = $Device.mac serial = $Device.serial networkId = $Device.networkId model = $Device.model claimedAt = $Device.claimedAt publicIp = $Device.publicIp } } finally { $obj = New-Object -TypeName PSObject -Property $DeviceProperties Write-Output $obj } } } END { } } function Get-MerakiDeviceStatus { <# .SYNOPSIS Short function to list Device Status. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to list Device Status. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "name": null, "serial": "Q2QN-WVV9-W4KK", "mac": "e0:55:3d:17:c6:87", "publicIp": "64.103.26.54", "networkId": "L_646829496481095933", "status": "offline", "usingCellularFailover": false, "wan1Ip": "10.10.20.70", "wan2Ip": null }, { "name": "S23", "serial": "Q2HP-AJ22-UG72", "mac": "88:15:44:df:76:d1", "publicIp": "64.103.26.57", "networkId": "L_646829496481095933", "status": "offline", "lanIp": "10.0.10.2" } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "deviceStatuses" = "https://api.meraki.com/api/v0/organizations/$OrganisationID/deviceStatuses" } $deviceStatuses = Invoke-RestMethod -Method GET -Uri $Uri.deviceStatuses -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $device in $deviceStatuses ) { $item = $device | Select-Object -Property * try { $DeviceProperties = @{ lanIp = $item.lanIp mac = $item.mac name = $item.name networkId = $item.networkId publicIp = $item.publicIp serial = $item.serial status = $item.status } } catch { $DeviceProperties = @{ lanIp = $item.lanIp mac = $item.mac name = $item.name networkId = $item.networkId publicIp = $item.publicIp serial = $item.serial status = $item.status } } finally { $obj = New-Object -TypeName PSObject -Property $DeviceProperties Write-Output $obj } } } END { } } function Get-MerakiLicenceState { <# .SYNOPSIS Short function to list organizations licences. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to list organizations licences. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. { "status": "OK", "expirationDate": "Feb 3, 2018 UTC", "licensedDeviceCounts": { "MS220-8P": 30, "MX65W": 2, "SM": 100, "wireless": 95, "MX64W": 2, "MX65": 6, "MC": 7, "Z1": 1, "MX64": 1, "MV": 4 } } You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "endPoint" = 'https://api.meraki.com/api/v0/organizations' "licenseState" = "https://api.meraki.com/api/v0/organizations/$OrganisationID/licenseState" } $licenseStates = Invoke-RestMethod -Method GET -Uri $Uri.licenseState -Headers @{ 'OrganisationID' = "$OrganizationId" 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $licenseState in $licenseStates ) { $Lic = $licenseState | Select-Object -Property * try { $LicProperties = @{ status = $Lic.status expirationDate = $Lic.expirationDate licensedDeviceCounts = $Lic.licensedDeviceCounts } } catch { $LicProperties = @{ status = $Lic.status expirationDate = $Lic.expirationDate licensedDeviceCounts = $Lic.licensedDeviceCounts } } finally { $obj = New-Object -TypeName PSObject -Property $LicProperties Write-Output $obj } } } END { } } function Get-MerakiNetwork { <# .SYNOPSIS Short function to provide details for an individual network configured on the Meraki Devices. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for an individual network configured on the Meraki Devices. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiNetworks -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. { "id": "L_646829496481092083", "organizationId": "549236", "name": "Sandbox 3 - Kampala Uganda", "timeZone": "US/Mountain", "tags": " LearningLab Sandbox ", "type": "combined" } You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "networks" = "https://api.meraki.com/api/v0/networks/$NetworkID" } $networks = Invoke-RestMethod -Method GET -Uri $Uri.networks -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $networks ) { $Settings = $item | Select-Object -Property * try { $networksProperties = @{ disableMyMerakiCom = $Settings.disableMyMerakiCom id = $Settings.id name = $Settings.name organizationId = $Settings.organizationId tags = $Settings.tags timeZone = $Settings.timeZone type = $Settings.type } } catch { $networksProperties = @{ disableMyMerakiCom = $Settings.disableMyMerakiCom id = $Settings.id name = $Settings.name organizationId = $Settings.organizationId tags = $Settings.tags timeZone = $Settings.timeZone type = $Settings.type } } finally { $obj = New-Object -TypeName PSObject -Property $networksProperties Write-Output $obj } } } END { } } function Get-MerakiNetworkList { <# .SYNOPSIS Short function to provide a list of networks configured on the Meraki Devices. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide a list of networks configured on the Meraki Devices. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiNetworks -ApiKey APIKeyGoesHere -OrganisationID OrgIDGoesHere .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "id": "L_646829496481092083", "organizationId": "549236", "name": "Sandbox 3 - Kampala Uganda", "timeZone": "US/Mountain", "tags": " LearningLab Sandbox ", "type": "combined" }, { "id": "L_646829496481095584", "organizationId": "549236", "name": "Sandbox 1 - Galway Ireland", "timeZone": "America/Los_Angeles", "tags": " Global Sandbox ", "type": "combined" }, { "id": "L_646829496481095933", "organizationId": "549236", "name": "Sandbox 2 - Las Vegas USA", "timeZone": "America/Los_Angeles", "tags": " Sandbox ", "type": "combined" } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "networks" = "https://api.meraki.com/api/v0/organizations/$OrganisationID/networks" } $networks = Invoke-RestMethod -Method GET -Uri $Uri.networks -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $networks ) { $Settings = $item | Select-Object -Property * try { $networksProperties = @{ id = $Settings.id organizationId = $Settings.organizationId name = $Settings.name timeZone = $Settings.timeZone tags = $Settings.tags type = $Settings.type } } catch { $networksProperties = @{ id = $Settings.id organizationId = $Settings.organizationId name = $Settings.name timeZone = $Settings.timeZone tags = $Settings.tags type = $Settings.type } } finally { $obj = New-Object -TypeName PSObject -Property $networksProperties Write-Output $obj } } } END { } } function Get-MerakiOrganisation { <# .SYNOPSIS Short function to list organizations the user has access to which will be needed to use with other commands within this module. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to output your Meraki Organisation ID which you will need in order to use with other commands within this module. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Export your companies ID, Name and SAML Url's Get-MerakiOrganisation.ps1 -ApiKey "YourApiKeyGoesHere" .EXAMPLE Export your companies ID, Name and SAML Url's by piping in your Api Key $key = "YourApiKeyGoesHere" Get-MerakiOrganisation.ps1 -ApiKey $key .EXAMPLE Export your company information (ID, Name and SAML Url's) by piping in your Api Key and specifying the Comapny ID $key = "YourApiKeyGoesHere" $CompanyID = "YourCompanyIDGoesHere" Get-MerakiOrganisation.ps1 -ApiKey $key -OrganisationID $CompanyID .EXAMPLE Export selected items from your Meraki by piping in your Api Key $key = "YourApiKeyGoesHere" Get-MerakiOrganisation.ps1 -ApiKey $key | Format-List -Property Name,ID .EXAMPLE Export your company information (ID, Name and SAML Url's) by piping in your Api Key and specifying the Comapny ID $key = "YourApiKeyGoesHere" $CompanyID = "YourCompanyIDGoesHere" Get-MerakiOrganisation.ps1 -ApiKey $key -OrganisationID $CompanyID | Format-List -Property * .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. { "id": 549236, "name": "Meraki Live Sandbox", "samlConsumerUrl": "https://n149.meraki.com/saml/login/-t35Mb/TvUzhbJtIRna", "samlConsumerUrls": ["https://n149.meraki.com/saml/login/-t35Mb/TvUzhbJtIRna"] } You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $false, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "organisation" = 'https://api.meraki.com/api/v0/organizations' } $Organisations = Invoke-RestMethod -Method GET -Uri $Uri.organisation -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $Organisation in $Organisations ) { $Org = $Organisation | Select-Object -Property * try { $OrgProperties = @{ ID = $Org.id Name = $Org.name SAMLUrl = $Org.samlConsumerUrl SAMLUrls = $Org.samlConsumerUrls } } catch { $OrgProperties = @{ ID = $Org.id Name = $Org.name SAMLUrl = $Org.samlConsumerUrl SAMLUrls = $Org.samlConsumerUrls } } finally { $obj = New-Object -TypeName PSObject -Property $OrgProperties Write-Output $obj } } } END { } } function Get-MerakiSitetoSite { <# .SYNOPSIS Short function to provide details for site to site Vpn's configured on the Meraki Devices. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for site to site Vpn's configured on the Meraki Devices. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiSitetoSite -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. { "mode": "spoke", "hubs": [ { "hubId": "N_4901849", "useDefaultRoute": true }, { "hubId": "N_1892489", "useDefaultRoute": false } ], "subnets": [ { "localSubnet": "192.168.1.0/24", "useVpn": true }, { "localSubnet": "192.168.128.0/24", "useVpn": true } ] } You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "siteToSiteVpn" = "https://api.meraki.com/api/v0/networks/$NetworkID/siteToSiteVpn" } $siteToSiteVpn = Invoke-RestMethod -Method GET -Uri $Uri.siteToSiteVpn -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $siteToSiteVpn ) { $Settings = $item | Select-Object -Property * try { $siteToSiteVpnProperties = @{ mode = $Settings.mode hubs = $Settings.hubs subnets = $Settings.subnets } } catch { $siteToSiteVpnProperties = @{ mode = $Settings.mode hubs = $Settings.hubs subnets = $Settings.subnets } } finally { $obj = New-Object -TypeName PSObject -Property $siteToSiteVpnProperties Write-Output $obj } } } END { } } function Get-MerakiSNMP { <# .SYNOPSIS Short function to provide SNMP Details. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide SNMP Details. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. { "v2cEnabled": true, "v3Enabled": false, "v3AuthMode": null, "v3PrivMode": null, "peerIps": null, "v2CommunityString": "o/-t35Mb", "hostname": "n149.meraki.com", "port": 16100 } You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "snmp" = "https://api.meraki.com/api/v0/organizations/$OrganisationID/snmp" } $SNMP = Invoke-RestMethod -Method GET -Uri $Uri.snmp -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $SNMP ) { $Settings = $item | Select-Object -Property * try { $SNMPProperties = @{ v2cEnabled = $Settings.v2cEnabled v3Enabled = $Settings.v3Enabled v3AuthMode = $Settings.v3AuthMode v3PrivMode = $Settings.v3PrivMode peerIps = $Settings.peerIps hostname = $Settings.hostname port = $Settings.port } } catch { $SNMPProperties = @{ v2cEnabled = $Settings.v2cEnabled v3Enabled = $Settings.v3Enabled v3AuthMode = $Settings.v3AuthMode v3PrivMode = $Settings.v3PrivMode peerIps = $Settings.peerIps hostname = $Settings.hostname port = $Settings.port } } finally { $obj = New-Object -TypeName PSObject -Property $SNMPProperties Write-Output $obj } } } END { } } function Get-MerakiTraffic { <# .SYNOPSIS Short function to provide details for site to site Vpn's configured on the Meraki Devices. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for site to site Vpn's configured on the Meraki Devices. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiSitetoSite -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "application": "Miscellaneous web", "destination": "scripts.dailymail.co.uk", "protocol": "TCP", "port": 80, "recv": 375, "sent": 12, "flows": 2, "activeTime": 60, "numClients": 1 }, { "application": "Miscellaneous web", "destination": "www.metdaan.com", "protocol": "TCP", "port": 80, "recv": 4218, "sent": 144, "flows": 9, "activeTime": 240, "numClients": 1 } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your TimeSpan (duration in seconds between two hours and one month).")] [Alias('TS')] [string]$TimeSpan ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "traffic" = "https://api.meraki.com/api/v0/networks/$NetworkID/traffic?timespan=$TimeSpan" } $traffic = Invoke-RestMethod -Method GET -Uri $Uri.traffic -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $traffic ) { $Settings = $item | Select-Object -Property * try { $trafficProperties = @{ application = $Settings.application destination = $Settings.destination protocol = $Settings.protocol port = $Settings.port sent = $Settings.sent recv = $Settings.recv numClients = $Settings.numClients activeTime = $Settings.activeTime flows = $Settings.flows } } catch { $trafficProperties = @{ application = $Settings.application destination = $Settings.destination protocol = $Settings.protocol port = $Settings.port sent = $Settings.sent recv = $Settings.recv numClients = $Settings.numClients activeTime = $Settings.activeTime flows = $Settings.flows } } finally { $obj = New-Object -TypeName PSObject -Property $trafficProperties Write-Output $obj } } } END { } } function Get-MerakiVLAN { <# .SYNOPSIS Short function to provide details for VLANs configured on a specific network ID. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for VLANs configured on a specific network ID. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiNetworks -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere -vlanID VlanIDGoesHere .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. { "id": "1234", "networkId": "N_24329156", "name": "My VLAN", "applianceIp": "1.2.3.4", "subnet": "192.168.1.0/24", "fixedIpAssignments": "{}", "reservedIpRanges": "", "dnsNameservers": "google_dns" } You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your VLAN ID.")] [Alias('vID')] [string]$vlanID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "vlans" = "https://api.meraki.com/api/v0/networks/$NetworkID/vlans/$vlanID" } $vlans = Invoke-RestMethod -Method GET -Uri $Uri.vlans -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $vlans ) { $Settings = $item | Select-Object -Property * try { $vlansProperties = @{ id = $Settings.id networkId = $Settings.networkId name = $Settings.name applianceIp = $Settings.applianceIp subnet = $Settings.subnet fixedIpAssignments = $Settings.fixedIpAssignments reservedIpRanges = $Settings.reservedIpRanges dnsNameservers = $Settings.dnsNameservers } } catch { $vlansProperties = @{ id = $Settings.id networkId = $Settings.networkId name = $Settings.name applianceIp = $Settings.applianceIp subnet = $Settings.subnet fixedIpAssignments = $Settings.fixedIpAssignments reservedIpRanges = $Settings.reservedIpRanges dnsNameservers = $Settings.dnsNameservers } } finally { $obj = New-Object -TypeName PSObject -Property $vlansProperties Write-Output $obj } } } END { } } function Get-MerakiVLANList { <# .SYNOPSIS Short function to provide details for VLANs configured on a specific network ID. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide details for VLANs configured on a specific network ID. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE Get-MerakiNetworks -ApiKey APIKeyGoesHere -NetworkID NetIDGoesHere .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "id": "10", "networkId": "N_1234", "name": "VOIP", "applianceIp": "192.168.10.1", "subnet": "192.168.10.0/24" } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Network ID.")] [Alias('NetID')] [string]$NetworkID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "vlans" = "https://api.meraki.com/api/v0/networks/$NetworkID/vlans" } $vlans = Invoke-RestMethod -Method GET -Uri $Uri.vlans -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $vlans ) { $Settings = $item | Select-Object -Property * try { $vlansProperties = @{ id = $Settings.id networkId = $Settings.networkId name = $Settings.name applianceIp = $Settings.applianceIp subnet = $Settings.subnet } } catch { $vlansProperties = @{ id = $Settings.id networkId = $Settings.networkId name = $Settings.name applianceIp = $Settings.applianceIp subnet = $Settings.subnet } } finally { $obj = New-Object -TypeName PSObject -Property $vlansProperties Write-Output $obj } } } END { } } function Get-MerakiVPNPeers { <# .SYNOPSIS Short function to provide third Party VPN Peer Details. In order to use this Module you will need an API Key from your Dashboard. .DESCRIPTION Short function to provide third Party VPN Peer Details. This function queries the Cisco Meraki API service https://dashboard.meraki.com/api/v0 and will be needed for use with additional commands within the module. API Access is free but Rate Controlled and is limited to 5 calls per second (per organisation). In order to use this Module you will need an API Key from your Dashboard. For access to the API, first enable the API for your organisation under Organiation > Settings > Dashboard API access. After enabling the API, go to the my profile page to generate an API key. The API key is associated with a Dashboard administrator account. You can generate, revoke, and regenerate your API key on your profile. .EXAMPLE .INPUTS Accepts Api Key as piped input. Accepts Organisation ID as piped input. .OUTPUTS The output from the API is sent as JSON and captured in a custom object. [ { "name":"Your peer", "publicIp":"192.168.0.1", "privateSubnets":[ "172.168.0.0/16", "172.169.0.0/16"], "secret":"asdf1234" } ] You can then select the items that you want to display. .NOTES Author: Luke Leigh Website: https://blog.lukeleigh.com/ LinkedIn: https://www.linkedin.com/in/lukeleigh/ GitHub: https://github.com/BanterBoy/ GitHubGist: https://gist.github.com/BanterBoy .LINK https://github.com/BanterBoy/CiscoMeraki/wiki #> [CmdletBinding()] param( [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your API Key.")] [Alias('API')] [string]$ApiKey, [Parameter(Mandatory = $True, ValueFromPipeline = $True, HelpMessage = "Enter your Organisation ID.")] [Alias('OrgID')] [string]$OrganisationID ) BEGIN { } PROCESS { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Uri = @{ "thirdPartyVPNPeers" = "https://api.meraki.com/api/v0/organizations/$OrganisationID/thirdPartyVPNPeers" } $thirdPartyVPNPeers = Invoke-RestMethod -Method GET -Uri $Uri.thirdPartyVPNPeers -Headers @{ 'X-Cisco-Meraki-API-Key' = "$ApiKey" 'Content-Type' = 'application/json' } foreach ( $item in $thirdPartyVPNPeers ) { $Settings = $item | Select-Object -Property * try { $thirdPartyVPNPeersProperties = @{ name = $Settings.name publicIp = $Settings.publicIp privateSubnets = $Settings.privateSubnets secret = $Settings.secret } } catch { $thirdPartyVPNPeersProperties = @{ name = $Settings.name publicIp = $Settings.publicIp privateSubnets = $Settings.privateSubnets secret = $Settings.secret } } finally { $obj = New-Object -TypeName PSObject -Property $thirdPartyVPNPeersProperties Write-Output $obj } } } END { } } Export-ModuleMember -Function '*' -Alias '*' -Cmdlet '*' |