Powershell Invoke-RestMethod POST方法超时问题

时间:2013-05-21 17:28:56

标签: rest post powershell-v3.0

我正在尝试编写一个删除特定设备文件的程序。该设备具有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& Body是正确的)。

我的第一印象是,在尝试重新发布之前,我应该关闭会话(如果这有任何意义)。

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

有没有人知道如何关闭一个打开的网页(使用新的Invoke-RestMethod命令)?或者有人认为问题出在其他地方吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

我在从AirWatch调用REST API时遇到过类似的问题。 显然这个bug已经提交给POST&删除以下方法:

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

答案 1 :(得分: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”覆盖当前值。

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