powershell – Invoke-WebRequest – 属性显示为具有值,但在以某种方式访问​​时,它为null

我正在使用以下命令从简单的
Linux打印设备上的Web管理界面上的html输入字段中提取值.

$get = Invoke-WebRequest -Uri ("http://" + $station + ":8080/cgi-bin/admin?page=pedi.sh&hash=" + $hash) -Method "GET

其中一个输入字段是一个复选框,我需要能够检查是否已选中.在这种情况下,复选框名为“Protocol”并进行检查.

$get.ParsedHtml.getElementsByName("Protocol") | Select checked

checked
True

如果我尝试使用以下命令获取值,则不返回任何内容.

($get.ParsedHtml.getElementsByName("Protocol")).checked

但如果我这样做,我就会得到价值……

($get.ParsedHtml.getElementsByName("Protocol") | Select checked).checked

我想知道为什么我看到这种行为,这是正常的吗?

我正在运行Windows 8 RTM,PowerShell 3.0.如果您需要更多信息,请告诉我.

最佳答案 我转载了你的问题.要获取checked属性(或任何其他属性)的值,我必须强制返回对象为数组,如下所示:

@($get.ParsedHtml.getElementsByName("Protocol"))[0].checked

或者,自从Powershell 3.0的新属性枚举功能:

@($get.ParsedHtml.getElementsByName("Protocol")).checked

所以它似乎只在通过枚举从getElementsByName返回的集合请求值时提供值.也许有人可以插话并解释这种行为.我猜这与使用com对象的事实有关?

点赞