web-dev-qa-db-fra.com

Appelez REST à partir du script PowerShell

Comment puis-je appeler une API basée sur le repos à partir d'un script PowerShell et traiter la réponse Json?

42
user285677

Ce que vous voulez, c'est PowerShell 3 et son Invoke-RestMethod, ConvertTo-Json, et ConvertFrom-Json applets de commande. Votre code finira par ressembler à:

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

et il ne devrait même pas être nécessaire d'invoquer ConvertFrom-Json sur le résultat $stuff => il est déjà dans un format non chaîne utilisable.

Voir http://technet.Microsoft.com/en-us/Library/hh849971.aspx pour plus de détails.

47
Dave

J'ai créé cette fonction Get-Http pour faire des requêtes 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()

Traiter le résultat final en XML est vraiment facile, cependant, si vous voulez traiter JSON, vous aurez probablement besoin d'une bibliothèque .Net comme JSON.Net.

22
Darrel Miller

Nous utilisons Powershell pour interroger une API REST qui ne traite que les données de style Json. C'était maladroit au début, mais le code ci-dessous est tout ce dont nous avons besoin pour effectuer la plupart des opérations:

# 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