From: https://stackoverflow.com/questions/39319680/onelogin-rest-api-with-powershells-invoke-restmethod
#generic Invoke-RestMethod / WebRequest error handler
#https://stackoverflow.com/questions/39319680/onelogin-rest-api-with-powershells-invoke-restmethod
function Failure {
$global:helpme = $body
$global:helpmoref = $moref
$global:result = $_.Exception.Response.GetResponseStream()
$global:reader = New-Object System.IO.StreamReader($global:result)
$global:responseBody = $global:reader.ReadToEnd();
Write-Host -BackgroundColor:Black -ForegroundColor:Red "Status: A system exception was caught."
Write-Host -BackgroundColor:Black -ForegroundColor:Red $global:responsebody
Write-Host -BackgroundColor:Black -ForegroundColor:Red "The request body has been saved to `$global:helpme"
break
}
Then, wrap all of your Invoke-RestMethod calls in a try Catch block like this.
try {
$e = Invoke-WebRequest 'https://api.us.onelogin.com/api/1/users/$id' `
-Headers @{ Authorization = "bearer:$token" } `
-Body ( @{ phone = "7709746046" } | ConvertTo-Json ) `
-Method Put -ErrorAction:Stop -ContentType 'application/json'
}
catch {Failure}
Now when you run into an error, you can see the actual message, like this
> Status: A system exception was caught.
{"status":{"error":true,"code":400,"type":"bad request","message":{"description":"notes is not a valid attribute for user model","attribute":"notes"}}}
The request body has been saved to $global:helpme