2

我正在尝试编写一个从特定设备中删除文件的程序。该设备有一个 REST API,我可以从 CLI 毫无问题地访问它。

例如,如果我在 CLI 中编写它,它可以工作:

$clip="test.mov"
$ClipsURL="http://123.45.67.89/clips"
$ClipToDelete=@{action="delete";clipname=$clip}
Invoke-RestMethod -Uri $ClipsURL -Body $ClipToDelete -Method Post -ContentType "application/x-www-form-urlencoded"

我可以使用 $ClipToDelete 参数(更改 $clip 的值),它每次都有效。

现在当我把它放在一个循环中(在我的主脚本中)它第一次工作,然后超时。

foreach($clip in $ListClips) {
$clip="test.mov"
$ClipsURL="http://123.45.67.89/clips"
$ClipToDelete=@{action="delete";clipname=$clip}
Invoke-RestMethod -Uri $ClipsURL -Body $ClipToDelete -Method Post -ContentType "application/x-www-form-urlencoded"
}

在调试时,我可以清楚地看到作为参数传递给 Invoke-RestMethod 的所有值都是正确的(URL 和正文是正确的)。

我的第一印象是,在再次尝试发布之前,我可能应该关闭会话(如果这有意义的话)。

我尝试SessionVariable在命令中添加一个参数,但它没有改变任何东西

是否有人已经知道如何关闭打开的网络会话(使用新的 Invoke-RestMethod 命令)?还是有人认为问题出在其他地方?

谢谢你。

4

2 回答 2

1

我在从 AirWatch 调用 REST API 时遇到了类似的问题。显然,该错误已针对以下 POST 和 DELETE 方法提交:

https://connect.microsoft.com/PowerShell/feedback/details/836732/tcp-connection-hanging-in-close-wait-when-using-invoke-restmethod-with-put-or-delete

但是我也确实遇到过 GET 请求间歇性地遇到这个问题,我在下面的 TechNet Wiki 文章中记录了我必须使用的解决方法,如果你发现一些额外的东西,也许你可以尝试这些并改进它:

http://social.technet.microsoft.com/wiki/contents/articles/29863.powershell-rest-api-invoke-restmethod-gotcha.aspx

于 2015-07-18T15:07:56.283 回答
0
foreach($clip in $ListClips) {
$clip="test.mov"
$ClipsURL="http://123.45.67.89/clips"
$ClipToDelete=@{action="delete";clipname=$clip}
Invoke-RestMethod -Uri $ClipsURL -Body $ClipToDelete -Method Post -ContentType "application/x-www-form-urlencoded"
}

在第二行中,您将使用“text.mov”覆盖当前值。

如果不是拼写错误,则可能是您第一次删除该对象,并且在尝试再次删除它时收到超时(这当然取决于服务器端的实现)

于 2013-07-14T13:44:35.340 回答