如何保存&在PowerShell中

时间:2016-03-02 05:44:30

标签: rest powershell powershell-v5.0

我正在尝试在PowerShell中实现ReST请求。

请求1:

$response = Invoke-RestMethod "my-custom-url" -Headers $headers -Method POST -Body $json -ContentType "application/json" -OutFile output.json -SessionVariable sv

请求1的响应:

{
  "@type": "user",
  "id": "00000703000000000010",
  "orgId": "000007",
  "name": "xxx@gmail.com",
 }

我需要保存“id”&的价值将其添加到下一个请求的标头中。我怎样才能做到这一点?

----更新 - 添加WriteHost $响应

@{@type=user; id=00000703000000000010; orgId=000007; name=xxx; createTime=2014-08-27T12:12:21.000Z; updateTime=2016-02-27
T00:40:13.000Z; createdBy=xxx@gmail.com; updatedBy=xxx; sfUsername=ppanigrahi; firstName=Pravakar; lastName=P
anigrahi; password=********; phone=9008433201; emails=xxx@gmail.com; timezone=IST; serverUrl=http://localhost:16006/saas; spiUrl
=https://localhost:8080/; icSessionId=QpXZEkqYEflJRY7h; securityQuestion=MOTHER_MAIDEN_NAME; forceChangePassword=False; uuid=C1bL60uIQqyRaF3
nXCHFkA; roles=System.Object[]; usergroups=System.Object[]}

2 个答案:

答案 0 :(得分:1)

由于您正在使用Invoke-RestMethod,因此响应将是一个包含数据属性的对象,您可以从$ Response.id访问该ID。

我不确定你是否想尝试将“Id”作为标题值或cookie传递(因为你也指的是你的会话变量;你通常会坚持使用例如cookie等)。

如果你想要的只是传递一个包含字段“Id”的自定义标题,你可以在下一个请求之前执行以下操作:

$headers.Add("Id",$response.id);

我假设你事先在这里定义了$ header。否则,您可以使用$ headers = @ {“Id”= $ response.id};。

直接创建它

然后在下一次服务调用时,只需重新使用$ headers变量。

如果您真正想要实现的是创建一个cookie并将其添加到您的会话(变量)中,那么您不必为每个后续调用重复自己;您应该创建一个cookie并添加它,执行以下操作:

$c=New-Object System.Net.Cookie;
$c.Name="Id";
$c.Path="/"
$c.Value = $response.Id;
# Make sure domain and path is matching your backend-server
$c.Domain = "foobar.com"; 
# Add cookie to your websession
$sv.Cookies.Add($c);

这将创建一个cookie并将其添加到您的websession(如果$ sv在您的会话中)。如果您没有webrequest会话(在您的情况下为$ sv),您可以使用$ sv = New-Object Microsoft.PowerShell.Commands.WebRequestSession;

在此之前创建它。

答案 1 :(得分:0)

$response.id应该包含您需要的值,因为Powershell会自动将json响应转换为PSCustomObject。然后,您应该可以通过$headers将该值添加到$headers.Add("HeaderName",$response.id)变量中,或者使用相应的标题名$request2Headers = @{ "HeaderName" = $response.id }创建一个新的哈希表。