PowerShellスクリプトからRESTベースのAPIを呼び出して、Jsonの回答を処理するにはどうすればよいですか?
必要なのは、PowerShell 3とそのInvoke-RestMethod
、ConvertTo-Json
、およびConvertFrom-Json
コマンドレットです。コードは次のようになります。
$stuff = Invoke-RestMethod -Uri $url -Method Get;
そして、結果のConvertFrom-Json
に対して$stuff
を呼び出す必要すらあるべきではありません=>それは既に使用可能な非文字列形式です。
詳細については、 http://technet.Microsoft.com/en-us/Library/hh849971.aspx を参照してください。
HTTP要求を行うためにこのGet-Http関数を作成しました
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()
最終結果をxmlとして扱うのは非常に簡単ですが、JSONを処理する場合は、JSON.Netのような.Netライブラリが必要になるでしょう。
Powershellを使用して、JSONスタイルのデータのみを処理するREST APIを照会します。最初は厄介でしたが、ほとんどの操作を実行するために必要なコードは次のとおりです。
# 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)