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 $response

@{@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[]}
4

2 回答 2

1

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

我不确定您是否想尝试将“Id”作为标头值或 cookie 传递(因为您也指的是会话变量;您通常会在其中保留例如 cookie 等)。

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

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

我假设您已经在这里预先定义了 $headers 。否则,您可以直接使用 $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 并将其添加到您的网络会话(如果 $sv 在您的会话中)。如果您没有 webrequest 会话(在您的情况下为 $sv),您可以使用 $sv = New-Object Microsoft.PowerShell.Commands.WebRequestSession; 预先创建它。

于 2016-03-02T07:20:09.260 回答
0

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

于 2016-03-02T07:15:39.510 回答