web-dev-qa-db-ja.com

REST PowerShellスクリプトからAPIを呼び出します

PowerShellスクリプトからRESTベースのAPIを呼び出して、Jsonの回答を処理するにはどうすればよいですか?

42
user285677

必要なのは、PowerShell 3とそのInvoke-RestMethodConvertTo-Json、およびConvertFrom-Jsonコマンドレットです。コードは次のようになります。

 $stuff = Invoke-RestMethod -Uri $url -Method Get;

そして、結果のConvertFrom-Jsonに対して$stuffを呼び出す必要すらあるべきではありません=>それは既に使用可能な非文字列形式です。

詳細については、 http://technet.Microsoft.com/en-us/Library/hh849971.aspx を参照してください。

47
Dave

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ライブラリが必要になるでしょう。

22
Darrel Miller

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)
5
ShaneC