2016-11-02 16 views
1

ich ein Problem mit dem Beispiel in Powershell für invoke-WebRequest meinen Code unten angegebenen:Powershell Invoke-WebRequest Login

$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 

Ich erhalte eine Fehlermeldung, „Can not Parameter 'Uri' binden. Kann Wert nicht zu System.Uri verdecken

Ich habe mich angeschaut und obwohl es verschiedene Beispiele dieses Codes gibt, scheint keiner für mich zu arbeiten. Könnte jemand bitte mir helfen, ich verstehe nicht, was dieses Finale Teil tut ($ r) alles, was es zu tun scheint, ruft die gleiche Seite erneut und nicht wirklich einloggen.

Danke

+0

die Halterung von der letzten Zeile entfernen, und es wird "www.facebook.com/login" -WebSession $ SMSESSION feiner '$ r = aufrufen-WebRequest -uri arbeiten - Methode Post-Body $ dbForm.Fields' –

+0

Hallo, der Code läuft gut ohne die Klammer, aber es meldet sich immer noch nicht für mich, gibt es eine Möglichkeit zu überprüfen, ob es tut? Ich meine, ich habe $ dbForm.fields nach dem Ausführen verwendet, aber es sagt immer noch die Login-Bildschirm – James

Antwort

0

Es gibt ein paar Probleme mit Ihrem Skript.

  1. Wenn Sie überprüfen, welche Felder in $dbForm.Fields verfügbar sind, werden Sie sehen:

    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  
    

    So müssen Sie wahrscheinlich die Linien ersetzen, wo Sie die Login-Daten mit übergeben:

    $dbForm.Fields["email"] = "johnsmith" 
    $dbForm.Fields["pass"] = "password1" 
    
  2. Nicht sicher, ob es ein Tippfehler ist oder nicht, aber die Klammer in Ihrer letzten Zeile muss nicht da sein (nach dem Entfernen kann ich das Skript ohne Fehler ausführen).

denke ich, was das Skript versucht, zu tun ist, mit den ersten Invoke-WebRequest, es ruft die Login-Seite, damit wir wissen, welche Felder zu uns zur Verfügung stehen (z email und pass). Die nächste Invoke-WebRequest soll dann die von uns eingegebenen Werte mit der Methode Post an die Seite zurücksenden.

+0

Hallo Danke für die Ruhe ich lief $ dbForm.Fields nach dem Ausführen des Skripts und ich habe diese im Gegenzug Schlüssel Wert --- ----- __EVENTTARGET __EVENTARGUMENT __VIEWSTATE .. Login1_Username MaxMustermann Login1_Password password1 Login1_LoginButton Anmelden – James

+0

Ja werden sie es sein, nachdem Sie das Skript ausführen, weil Sie sie hinzugefügt haben, aber sind Sie sicher, dass diejenigen, die Pflichtfelder sind Namen? Vielleicht möchten Sie auch Ihre Frage bearbeiten, weil dieser Code nicht ausgeführt wird, und der Fehler ist anders – Bassie

+0

Hallo, danke für Ihre Antwort Ich habe meine Frage aktualisiert und ich lief es erneut, bei der Rückkehr bekomme ich die Werte für Login1_Username johnsmith Login1_Password password1 Login1_LoginButton Einloggen – James

1

Ich hatte das gleiche Problem und ich denke meine Lösung sollte auch für Sie arbeiten.

Zuerst installieren Sie Fiddler. Während der Fiddler läuft, melden Sie sich manuell auf der Website an. Sie sollten die Anmeldeanforderung in der Fiddler-Ablaufverfolgung sehen. Wenn Sie sich die WebForms-Registerkarte in der Ablaufverfolgung ansehen, sollten die Felder Benutzername und Kennwort dort erscheinen.

Aus irgendeinem Grund waren die Feldnamen beim manuellen Anmelden unterschiedlich! Die Feldnamen hatten "$" Zeichen an Orten, die powerShell als "_" Zeichen, z. ContentPlaceHolder $ txtUserName, nicht ContentPlaceHolder_txtUserName, das PowerShell angezeigt wird.

Anstatt die Felder Benutzername und Kennwort, die powerShell als Teil des Formulars angegeben hat, mit Werten zu versehen, löschte ich diese, erstellte neue Felder mit denselben Namen wie in Fiddler und füllte diese neuen Felder aus.

Da "$" ein Sonderzeichen in PowerShell ist, müssen Sie das Präfix mit `versehen, um es einfach als Dollarzeichen zu verwenden, damit powerShell denkt, dass Sie auf den Beginn eines Variablennamens verweisen.

Siehe Code unten: -

$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

habe dies auf run: invoke-WebRequest: Server Fehler in '/' Anwendung. Ungültiges Postback- oder Callback-Argument. Die Ereignisvalidierung wird mit in der Konfiguration oder <% @ Page EnableEventValidation = "true"%> auf einer Seite aktiviert. Aus Sicherheitsgründen überprüft diese Funktion, dass Argumente für Postback- oder Callback-Ereignisse vom Serversteuerelement stammen, das sie ursprünglich gerendert hat. Wenn die Daten gültig und erwartet sind, verwenden Sie die ClientScriptManager.RegisterForEventValidation-Methode, um die Postback- oder Rückrufdaten für die Validierung zu registrieren. irgendwelche Ideen ?? – James

Verwandte Themen