从PowerShell脚本调用REST API

use*_*677 42 rest powershell

如何从PowerShell脚本调用基于rest的API并处理Json答案?

Dav*_*ave 47

你想要的是PowerShell的3和Invoke-RestMethod,ConvertTo-JsonConvertFrom-Json的cmdlet.您的代码最终将如下所示:

 $stuff = Invoke-RestMethod -Uri $url -Method Get;
Run Code Online (Sandbox Code Playgroud)

甚至不需要调用ConvertFrom-Json结果$stuff=>它已经是一个可用的非字符串格式.

有关详细信息,请参阅http://technet.microsoft.com/en-us/Library/hh849971.aspx.


Dar*_*ler 22

我创建了这个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()
Run Code Online (Sandbox Code Playgroud)

因为xml很容易处理最终结果,但是,如果你想处理JSON,你可能需要一些像JSON.Net这样的.Net库.


Sha*_*neC 5

我们使用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)
Run Code Online (Sandbox Code Playgroud)

  • 我不会在生产中使用此代码,因为凭据已作为纯文本硬编码到脚本中。它们应该是脚本参数并且应该被加密。这只是一个示例脚本,它什么也没做,所以除了回答这里提出的问题外,我不会将它投入生产,因为它什么也没做。一个简单问题的简单答案。 (2认同)