2016-11-02 32 views
1

私がinvoke-WebRequestクラスについては、以下の私のコードPowerShellで与えられた例を使用して、問題を抱えている:私は「パラメータ 『ウリ』をバインドできませんというエラーを取得していますPowerShellの起動-WebRequestクラスのログイン

$wr = Invoke-WebRequest -URi "http://localhost:51880/Users/Login.aspx" -SessionVariable SMSession 
$SMSession 
$dbForm = $wr.Forms[0] 
$dbForm 
$dbForm.fields 

$dbForm.Fields["Login1_Username"] = "johnsmith" 
$dbForm.Fields["Login1_Password"] = "password1" 



$r = invoke-WebRequest -Uri "http://localhost:51880/Users/Login.aspx" -WebSession $SMSession -Method Post -Body $dbForm.Fields 

を。

私はこのコードのさまざまな例がありますが、私にとってはうまくいきませんが、誰かが私を助けてくれますか? ($ r)やっているように見えるのは、同じページをもう一度呼び出して実際にログインしていないことだけです。

ありがとう

+0

最後の行からブラケットを取り外し、それは細かい '$ rを=呼び出し、WebRequestクラス-uri "www.facebook.com/login" -WebSession $ SMSESSIONを動作します - メソッドPost-Body $ dbForm.Fields' –

+0

こんにちは、コードは大括弧なしで正常に実行されますが、まだ実際には私にサインインしていません。もしそうなら、チェックする方法はありますか?私はそれを実行した後$ dbForm.fieldsを使用していたが、まだログイン画面が表示されていることを意味する – James

答えて

0

スクリプトにはいくつか問題があります。

  1. あなたは$dbForm.Fieldsで利用可能なフィールドを確認した場合、あなたが表示されます。

    Key      Value  
    ---      -----  
    lsd      AVq5lobS 
    display        
    enable_profile_selector    
    isprivate       
    legacy_return   0   
    profile_selector_ids    
    return_session      
    skip_api_login      
    signed_next       
    trynum     1   
    u_0_0        
    u_0_1        
    lgnrnd     065033_QxW1 
    lgnjs     n   
    email      
    pass      
    persistent       
    default_persistent  1  
    

    だから、あなたはおそらく、あなたがログイン情報を渡すの行を交換する必要があります。

    $dbForm.Fields["email"] = "johnsmith" 
    $dbForm.Fields["pass"] = "password1" 
    
  2. タイプミスかどうかはわかりませんが、最後の行の括弧はそこにある必要はありません(削除した後でエラーなしでスクリプトを実行できます)。

私はスクリプトがやろうとしているものだと思うが、我々は、私たち(例えばemailpass)への利用可能なフィールドを知っているように、最初Invoke-WebRequestと、それは、ログインページを取得し、です。次のInvoke-WebRequestは、Postメソッドを使用して、入力した値をページに送り返すことになっています。

+0

こんにちはありがとう、私は$ dbForm.Fieldsを実行したスクリプトを実行した後、 -----あなたはそれらを追加したので、スクリプトを実行していますが、それらは必須項目であることを確認した後 – James

+0

で __EVENTTARGET __EVENTARGUMENT __VIEWSTATE .. Login1_Username johnsmith Login1_Passwordパスワード1 Login1_LoginButtonログはい、彼らはあるだろう名前?また、そのコードが実行されず、エラーが異なるので、あなたの質問を編集したいかもしれません – Bassie

+0

こんにちは、私の質問を更新して、返信してくれました。Login1_Username johnsmith Login1_Password password1 Login1_LoginButtonログイン – James

1

私は非常に同じ問題を抱えていました。私の解決策もあなたのために働くはずです。

まず、Fiddlerをインストールします。その後、フィドラーが実行されている間、手動でウェブサイトにログインします。フィドラートレースでログイン要求が表示されるはずです - トレースのWebFormsタブを見ると、そこにはユーザー名とパスワードフィールドが表示されます。

何らかの理由で、手動でログインすると、フィールド名が異なります。フィールド名は、 "_"と表示されていた場所に、"$"文字が表示されていました。 PowerShellが表示するContentPlaceHolder_txtUserNameではなく、ContentPlaceHolder $ txtUserName。

PowerShellがフォームの一部であると主張しているユーザー名とパスワードのフィールドに値を割り当てる代わりに、それらを削除し、Fiddlerに表示されている同じ名前の新しいフィールドを作成し、

また、 "$"はpowerShell内の特殊文字であるため、変数名の先頭を参照しているとPowerShellが思ってしまうのを防ぐために、単にドル記号として使用するには、その前に `を付ける必要があります。以下

を参照してくださいコード: -

$webRequest = Invoke-WebRequest -URi "http://YourWebsite/Login.aspx" -SessionVariable SMSession 

$dbForm = $webRequest.Forms[0] 

# For some reason, the field values returned have underscores instead of $ signs! Need to delete this, then recreate 
# with the correct values, using ` to allow $ to be passed without treating it as a variable. 
$dbForm.fields.Remove("ContentPlaceHolder_txtUserName") 
$dbForm.fields.Remove("ContentPlaceHolder_txtPassword") 

$dbform.fields.Add("ContentPlaceHolder`$txtUserName", "admin") 
$dbform.fields.Add("ContentPlaceHolder`$txtPassword", "Password2") 

#$dbform.fields 

$r = invoke-WebRequest -Uri ("http://YourWebsite/Login.aspx") -WebSession $SMSession -Method Post -Body $dbForm.Fields 

$r.RawContent 
+0

で実行しようとすると、実行時にこの問題が発生します:invoke-WebRequest: '/'アプリケーションのサーバーエラー。 ポストバックまたはコールバックの引数が無効です。イベントの検証は、設定でを使用するか、ページの<%@ Page EnableEventValidation = "true"%>を使用して有効にします。セキュリティ上の理由から、この機能はポストバックまたはコールバックイベントの引数が元々レンダリングされたサーバーコントロール から発生することを確認します。データが有効で予期されている場合は、ポストバックまたは コールバックデータを登録するために、ClientScriptManager.RegisterForEventValidationメソッドを使用して検証します。 任意のアイデア?? – James

関連する問題