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 と本文が正しい) ことを明確に確認できます。

私の第一印象は、Post を再試行する前に、おそらくセッションを閉じる必要があるということです (それが理にかなっている場合)。

SessionVariableコマンドにパラメーターを追加しようとしましたが、何も変わりませんでした

(新しい Invoke-RestMethod コマンドを使用して) 開いたままの Web セッションを閉じる方法を既に知っている人はいますか? それとも、問題は別の場所にあると考えている人はいますか?

ありがとうございました。

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"
}

2 行目では、現在の値を「text.mov」で上書きしています。

タイプミスでない場合は、最初にオブジェクトを削除し、再度削除しようとするとタイムアウトが発生する可能性があります (もちろん、サーバー側の実装に依存します)。

于 2013-07-14T13:44:35.340 に答える