cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Powershell MX L7 Update - Error Bad Request

Highlighted
Comes here often

Powershell MX L7 Update - Error Bad Request

I am trying to update the MX L7 firewall rules and am getting a 400 Bad Request.  If I compare what my variable looks like that I am using to do the update via the API to what it looks like if I update it in the dashboard and get the rules it appears to be the same.  Below it the main part of the code.  It reads through the existing rules and if the rule I need isn't there is adds it.  Same issue with V0 or V1; this code is currently using V1.

 

#Check and create MX - Layer 7 Firewall Rules
$FW = Get_Meraki("https://dashboard.meraki.com/api/v1/networks/" + $Network.id + "/appliance/firewall/l7FirewallRules")
$Bit_Exist = $false
foreach ($Rule in $FW.rules)
{
if ($Rule.policy -eq "deny" -and $Rule.type -eq "application" -and $Rule.value.id -eq "meraki:layer7/application/110" -and $Rule.value.name -eq "BitTorrent")
{ $Bit_Exist = $true }
}

if ( $Bit_Exist -eq $false )
{
$New_Rule = @()
$New_Rule = "" | Select policy,type,value
$New_Rule.policy = "deny"
$New_Rule.type = "application"

$Value_Rule = @()
$Value_Rule = "" | Select id,name
$Value_Rule.id = "meraki:layer7/application/110"
$Value_Rule.name = "BitTorrent"

$New_Rule.value = $Value_Rule

$FW.rules += $New_Rule

#PUT/networks/{networkId}/appliance/firewall/l7FirewallRules
$json = $FW | ConvertTo-Json
$UpdateURL = "https://" + $Shard + ".meraki.com/api/v1/networks/" + $Network.id + "/appliance/firewall/l7FirewallRules"

#Update Meraki
Start-Sleep -m 300
Try
{
$response = Invoke-RestMethod $UpdateURL -Method Put -Body $json -Headers $headers -ContentType 'application/json'
}
Catch
{
$_.Exception
"Error"
}
}

 

3 REPLIES 3
Highlighted
Kind of a big deal

Re: Powershell MX L7 Update - Error Bad Request

The call should be to:

https://api.meraki.com/api/v1/networks/

 

Also make sure your code follows redirects (or use api-mp.meraki.com).

 

Highlighted
Comes here often

Re: Powershell MX L7 Update - Error Bad Request

I have been using the shard approach for the last year and half or so since Meraki added the redirects, doesn't seem like Powershell likes it from a Security point of view.  I get the following error when using https://api.meraki.com: "The remote server returned an error: (308) Permanent Redirect".

 

I tried https:/api-mp.meraki.com: and got the same error as using the shard: "The remote server returned an error: (400) Bad Request."  Although this looks like it will solve having to use Shard, we will give it a try in one of my other scripts.

 

Thanks

Highlighted
Meraki Employee

Re: Powershell MX L7 Update - Error Bad Request

Hi @MarkMoore! I reviewed your code and didn't see where API key was being passed with the appropriate API key header. Where is the API key being appended to your request--inside $headers I presume? If so, what's the structure of that variable?

 

Please remember to not share your actual API key in your response--just curious where/how it's added to the request.

Welcome to the Meraki Community!
To start contributing, simply sign in with your Cisco account. If you don't yet have a Cisco account, you can sign up.