Call REST API from PowerShell Script
Solution 1:
What you want is PowerShell 3 and its Invoke-RestMethod
, ConvertTo-Json
, and ConvertFrom-Json
cmdlets. Your code will end up looking like:
$stuff = Invoke-RestMethod -Uri $url -Method Get;
and there shouldn't even be a need to invoke ConvertFrom-Json
on the resulting $stuff
=> it's already in a usable non-string format.
See http://technet.microsoft.com/en-us/Library/hh849971.aspx for details.
Solution 2:
I created this Get-Http function to make HTTP requests
param([string]$url)
$req = [System.Net.WebRequest]::Create($url)
$req.Method ="GET"
$req.ContentLength = 0
$resp = $req.GetResponse()
$reader = new-object System.IO.StreamReader($resp.GetResponseStream())
$reader.ReadToEnd()
Dealing with the end result as xml is really easy, however, if you want to process JSON you probably will need some .Net library like JSON.Net.
Solution 3:
We use Powershell to query a REST API that deals only with Json style data. It was awkward at first but the below code is all we need to perform most operations:
# Authentication
$webclient = New-Object System.Net.WebClient
$creds = New-Object System.Net.NetworkCredential("MyUsername","MyPassword");
$webclient.Credentials = $creds
# Data prep
$data = @{Name='Test';} | ConvertTo-Json
# GET
$webClient.DownloadString($url) | ConvertFrom-Json
# POST
$webClient.UploadString($url,'POST',$data)
# PUT
$webClient.UploadString($url,'PUT',$data)