我正在处理一个Powershell脚本,该脚本将在我的公司打印服务器上创建一个打印机,该打印机已经完成并且可以正常工作。
但是我们有一个列出所有使用IP的位置,这是一个网页。
因此,我正在尝试使用Invoke-WebRequest
来执行此操作。登录该页面是可行的,但是随后尝试使用该表单添加IP时却没有。
登录表单中只有一个提交按钮,要添加IP,则有三个按钮。我将按照它们在页面上的顺序列出它们
因此,我在考虑Invoke-Webrequest
时是否使用“清除表单”功能。
有什么办法可以指定发送Web请求时要使用的功能?
我不能删除“清除表单”按钮,因为它经常被使用,只是为了使它变得清晰。
$R = Invoke-WebRequest -URI http://localhost -SessionVariable IP
$Form = $R.Forms[0]
$Form.fields["ctlUsername"]=User
$Form.fields["ctlPassword"]=Pass
$R=Invoke-WebRequest -Uri ("http://localhost/" + $Form.Action) -WebSession
$IP -Method POST -Body $Form.Fields
$D = Invoke-WebRequest -URI http://localhost/addIP.php -WebSession $Test
$Form2 = $D.Forms[0]
$Form2.fields["IP"]="172.10.0.1"
$Form2.fields["name"]="Printer300"
$Form2.fields["location"]="Room407"
$Form2.fields["MAC"]="000"
$Form2.fields["ID"]="000"
Invoke-WebRequest -Uri http://localhost/addIP.php -WebSession $IP -Method POST -Body $Form2.Fields
答案 0 :(得分:1)
在发送这些请求时,不要以“填写网页”的方式思考。人类用户的网页。填写表单并单击按钮是使用数据创建HTTP消息的手动方法。
发布此表单时:
IP: [172.10.0.1 ] Name: [Printer300 ] Location: [Room407 ] [Apply] [Cancel]
浏览器创建如下这样的文本字符串:
IP=172.10.0.1&Name=Printer300&Location=Room407
并将其发送到目标URL。
Invoke-WebRequest
可以直接从您的数据创建此格式。这意味着,您无需“填写”任何内容。只需传递带有适当键和值的哈希表即可:
Invoke-WebRequest "http://localhost/addIP.php" -WebSession $IP -Method POST -Body @{
IP = "172.10.0.1"
Name = "Printer300"
Location = "Room407"
MAC = "000"
ID = "000"
}
当然,键必须与表单字段名称相对应。
话虽这么说,我认为从本地主机发出的请求不需要身份验证。通过对所有本地请求禁用身份验证,并且仅对远程请求进行身份验证,可以节省一些工作。
无论如何,让网站要求输入密码然后将该密码以明文形式存储在脚本中并不是一开始就完全安全的。
Invoke-WebRequest
支持Windows集成身份验证,因此您完全不必担心用户名和密码。对于此类任务,这将是我的首选身份验证解决方案。
答案 1 :(得分:0)
发现了问题,它需要一个隐藏的值,该值不是通过表单发送的,而是稍后在php函数中添加的。 感谢您的所有帮助。