我在使用powershell中给出的示例调用-WebRequest下面的代码时出现问题:
function UpdateChart(chart) {
var data = {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
}
chart.data.labels = data.labels
chart.data.datasets = data.datasets
chart.update()
}
我收到错误消息“无法绑定参数'Uri'。无法将值转换为System.Uri。
我已经看了一下,虽然这个代码有不同的例子似乎对我没有用。有人可以请帮助我,我不知道这个最后部分正在做什么($ r)所有它似乎正在做的是再次调用同一页面而不是实际登录。
由于
答案 0 :(得分:1)
我遇到了同样的问题,我认为我的解决方案也适合你。
首先,安装Fiddler。然后在fiddler运行时,手动登录网站。您应该在fiddler跟踪中看到登录请求 - 如果查看跟踪上的WebForms选项卡,您应该看到填充的用户名和密码字段。
出于某种原因,手动登录时,字段名称不同!字段名称在powerShell显示为的地方有" $" 字符 " _" 字符,例如ContentPlaceHolder $ txtUserName,而不是PowerShell显示的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
答案 1 :(得分:0)
您的脚本存在一些问题。
如果您检查$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"
不确定是否是拼写错误,但最后一行中的括号不需要在那里(删除后我可以运行脚本而没有任何错误)。
我认为脚本尝试做的是,在第一个Invoke-WebRequest
时,它会检索登录页面,以便我们知道哪些字段可供我们使用(例如email
和{{ 1}})。然后,下一个pass
应该使用Invoke-WebRequest
方法将我们输入的值发送回页面。