Как я могу называть API, основанный на отдыхе, из PowerShell script и обрабатывать ответ Json?
Вызовите API REST из PowerShell Script
Ответ 1
Вы хотите использовать 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.
Ответ 2
Я создал эту функцию Get-Http для создания 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, вам, вероятно, понадобится некоторая библиотека .Net, такая как JSON.Net.
Ответ 3
Мы используем Powershell для запроса REST API, который использует только данные стиля Json. Сначала это было неудобно, но приведенный ниже код - это все, что нам нужно для выполнения большинства операций:
# 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)