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

时间:2012-10-23 16:41:46

标签: powershell

我正在使用以下命令从简单的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
  

检查
  真

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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