我有一个可用的PowerShell 3.0脚本,利用
我希望有人能够将下面的脚本转换为适用于PowerShell 2.0的版本(无需安装PS模块、包或升级PowerShell)。看起来我需要使用.NET webclient,但我还没有足够的经验来做这件事。如果能提供一个基于我的脚本的可用示例,那将非常感激!
PS:我正在使用
Invoke-WebRequest
来提交表单并保存相应的原始HTML输出。不幸的是,该脚本在只安装了PowerShell 2.0的工作站上无法正常工作。我希望有人能够将下面的脚本转换为适用于PowerShell 2.0的版本(无需安装PS模块、包或升级PowerShell)。看起来我需要使用.NET webclient,但我还没有足够的经验来做这件事。如果能提供一个基于我的脚本的可用示例,那将非常感激!
PS:我正在使用
sls-pattern
过滤原始HTML输出中的内容。如果有更可靠的方法来识别原始输出中的某些项,我不介意看到一个示例。$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
编辑:以下是我第一次尝试让脚本运行。无论如何,它显然没有像上面我的工作中的Invoke-WebRequest脚本那样做同样的事情。
$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();