Windows 8にアップグレードしたので、非表示のIEの起動に依存するPowerShellスクリプトの多くは機能しなくなったので、Invokeに切り替えてみました-WebRequestコマンド。多くのグーグルを実行しましたが、それでもスクリプトを機能させることができません。
これはそれがすべきことです:
信じられないほど悪いMicrosofttech-netの例(少なくとも私にとっては)の「助け」を借りて、私は次のことをまとめました。
$myUrl = "http://some.url"
$response = Invoke-WebRequest -Uri $myUrl -Method Default -SessionVariable $rb
$form = $response.Forms[0]
$form.Fields["user"] = "username"
$form.Fields["password"] = "password"
$response = Invoke-WebRequest -Uri $form.Action -WebSession $rb -Method POST
$response.StatusDescriptionOK
「ユーザー」フィールドに書き込もうとしたときに最初のエラーが発生します。
Null配列にインデックスを付けることはできません。
$ form.Fields ["user"] = "username"
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NullArray
2つ目は、$form.Action
と関係がありますが、何を読むべきかわかりません。
Invoke-WebRequest:パラメーター 'Uri'の引数を検証できません。引数がnullまたは空です。 nullまたは空でない引数を指定してから、コマンドを再試行してください。
繰り返しになりますが、私は Microsoftの例2 に大きく依存していました。
編集:大文字化のためのhammarに感謝します。私のマナーはどこにありますか? ;)
直接投稿してみてください。例:
$formFields = @{username='john doe';password='123'}
Invoke-WebRequest -Uri $myUrl -Method Post -Body $formFields -ContentType "application/x-www-form-urlencoded"
署名されていない/信頼されていない証明書の問題に対処するには、次の行を追加します
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
invoke-WebRequestステートメントの前
質問の例は機能しますが、最初の行で$rb
ではなくrb
を使用する必要があります。
$response = Invoke-WebRequest -Uri $myUrl -Method Default -SessionVariable rb
これは私のログインアドレスであるため、($myUrl + '/login')
も使用する必要がありました。
$ response = Invoke-WebRequest -Uri($ myUrl + '/ login')-メソッドのデフォルト-SessionVariable rb
そして最後の行で使用された($myUrl + $form.Action)
:
$response = Invoke-WebRequest -Uri ($myUrl + $form.Action) -WebSession $rb -Method POST
あなたが私で、悪いWebリクエストのトラブルシューティングを行っている場合、私の場合は-Body
それは私のAPIでnull
になりました、それならあなたはあなたの行の継続をコメントでインターリーブすることについての落とし穴について知りたいでしょう。この
$r = iwr -uri $url `
-method 'POST' `
-headers $headers `
# -contenttype 'application/x-www-form-urlencoded' ` # default
-Body $body
コメントアウトされた行に注意してください# -contenttype 'application/x-www-form-urlencoded' # default
コメントを入力すると、残りのバックティックされた行の継続が切り捨てられます。したがって、私の場合、私のWeb要求は、0バイトのペイロードを持つ要求になりました。