Ich habe ein funktionierendes PowerShell 3.0-Skript, das Invoke-WebRequest
nutzt, um ein Formular zu posten und die entsprechende HTML-Ausgabe zu speichern. Leider funktioniert das Skript nicht auf Arbeitsstationen mit nur PowerShell 2.0.HTTP-Formular ohne Verwendung von 'Invoke-WebRequest' schreiben
Ich hatte gehofft, jemand könnte bitte helfen, das folgende Skript zu konvertieren, um mit PowerShell 2.0 zu arbeiten (ohne PS-Module, Pakete installieren oder PowerShell aktualisieren). Es sieht so aus, als müsste ich den .NET Webclient benutzen, aber ich bin noch nicht erfahren genug, dies zu tun. Ein funktionierendes Beispiel (basierend auf meinem Skript) würde sehr geschätzt werden!
PS: Ich benutze sls -pattern
, um Inhalt in der Raw-HTML-Ausgabe herauszufiltern. Wenn es eine zuverlässigere Möglichkeit gibt, bestimmte Elemente in der Rohausgabe zu identifizieren, würde es mir nichts ausmachen, ein Beispiel zu sehen.
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET CLR 1.1.4322; InfoPath.3; MS-RTC LM 8; .NET4.0E)'
$r=Invoke-WebRequest -Uri 'http://web.ourwebserver.com/test.aspx' -UseDefaultCredentials -SessionVariable WebSession
$form = $r.Forms[0]
$fields = Invoke-WebRequest -Uri 'http://web.ourwebserver.com/test.aspx' -WebSession $WebSession | select -ExpandProperty inputfields | select name, value
$viewstate = $fields | ?{$_.name -match "VIEWSTATE"} | select -ExpandProperty value
$eventvalidation = $fields | ?{$_.name -match "EVENTVALIDATION"} | select -ExpandProperty value
$form.Fields["__EVENTVALIDATION"] = $eventvalidation
$form.Fields["ctl00`$MainContent`$phone"] = "454-454-2345"
$form.Fields["ctl00`$MainContent`$Submit"] = "Submit"
$response = Invoke-WebRequest -Uri 'http://web.ourwebserver.com/test.aspx' -WebSession $WebSession -Method POST -Body $form.Fields -ContentType 'application/x-www-form-urlencoded'
$result = $response.rawcontent
EDIT: Unten ist mein erster Versuch des Skript auf dem Weg zur Arbeit. Wie auch immer, es ist offensichtlich nicht das gleiche tun wie mein WORKING Invoke-WebRequest Skript oben
$URL = "http://web.ourwebserver.com/test.aspx"
$wc = new-object net.WebClient
$wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
$wc.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET CLR 1.1.4322; InfoPath.3; MS-RTC LM 8; .NET4.0E)")
$wc.UseDefaultCredentials = $true
### EventValidation/ViewState Extraction Code ###
$probe = $wc.downloadData($url)
$s = [text.encoding]::ascii.getString($probe)
$start = $s.indexOf('id="__VIEWSTATE"', 0) + 24
$end = $s.indexOf('"', $start)
$viewstate = $s.substring($start, $end-$start)
$start = $s.indexOf('id="__EVENTVALIDATION"', 0) + 30
$end = $s.indexOf('"', $start)
$eventvalidation = $s.substring($start, $end-$start)
###
$NVC = New-Object System.Collections.Specialized.NameValueCollection
$NVC.Add("__EVENTVALIDATION", $eventvalidation)
$NVC.Add("ctl00`$MainContent`$phone", "454-454-2345")
$NVC.Add("ctl00`$MainContent`$Submit", "Submit")
$wc.QueryString = $NVC
$Result = $WC.UploadValues($URL,"POST", $NVC)
[System.Text.Encoding]::UTF8.GetString($Result)
$WC.Dispose();
Ich bin ziemlich sicher, dass ich den Großteil der Antwort richtig geschrieben. Ich denke, möglicherweise etwas falsch gemacht, wenn Sie Werte/Daten zu $ NVC hinzufügen. – MKANET