Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internet explorer 方法调用失败,因为[System.Object[]]不';t包含名为'的方法;单击';_Internet Explorer_Powershell_Com - Fatal编程技术网

Internet explorer 方法调用失败,因为[System.Object[]]不';t包含名为'的方法;单击';

Internet explorer 方法调用失败,因为[System.Object[]]不';t包含名为'的方法;单击';,internet-explorer,powershell,com,Internet Explorer,Powershell,Com,我正在用PowerShell运行下面的代码,它在一台服务器上成功运行,但在另一台服务器上没有。这两台服务器都运行带有IE 8的Windows Server R2标准。脚本在管理模式下运行,也在IE下运行,本地Intranet的“启用保护模式”被关闭 $ie = new-object -com "InternetExplorer.Application" $ie.visible = $true $ie.Navigate("http://localhost/testwebsite") While

我正在用PowerShell运行下面的代码,它在一台服务器上成功运行,但在另一台服务器上没有。这两台服务器都运行带有IE 8的Windows Server R2标准。脚本在管理模式下运行,也在IE下运行,本地Intranet的“启用保护模式”被关闭

$ie = new-object -com "InternetExplorer.Application"
$ie.visible = $true 
$ie.Navigate("http://localhost/testwebsite")
While ($ie.Busy) {Sleep 3}
$doc = $ie.Document
$btn = $doc.getElementsByTagName("input")
$Button = $btn | ? {$_.Name -eq "refreshBtn"}
$Button.Click()
$ie.Quit()
下面是我在其中一个框上得到的错误(注意:不要在另一台机器上收到此错误):

服务器上是否有需要更改的安全设置?我需要调整脚本吗?还有别的吗

顺便说一句:我查看了有关StackOverflow的各种帖子,到目前为止,我还没有找到任何有用的东西


提前谢谢

不知道为什么不同,但它看起来像你的管道

$Button = $btn | ? {$_.Name -eq "refreshBtn"}
返回多个按钮,因此
$Button
实际上是一个数组。PowerShell 3处理得更好:它实际上会对数组中的每个元素调用
Click()
。升级到PowerShell 3可能不是一个选项

你可以用几种方法来解决这个问题。首先,将
Click()
方法调用添加到查找按钮的管道:

$doc.getElementsByTagName("input") | 
    Where-Object { $_.Name -eq "refreshBtn" } | 
    ForEach-Object { $_.Click() }
当然,如果您返回多个按钮,您可能会认为这是一个错误。在这种情况下,您需要处理它:

$Button = $doc.getElementsByTagName("input") | 
              Where-Object {$_.Name -eq "refreshBtn"}
if( $Button -is 'Object[]' )
{
    Write-Error ('Found multiple <refreshBtn> buttons.')
}
$Button=$doc.getElementsByTagName(“输入”)|
其中对象{$\.Name-eq“refreshBtn”}
如果($按钮-为“对象[]”)
{
写入错误('找到多个按钮')
}

我猜不止一个按钮的名称是“refreshBtn”;这就是为什么
$button
在一个数组(按钮类型)中,而没有一个按钮具有调用
click()
方法的原因。是的,您实际上是对的。有两个带有“refreshBtn”的按钮。我对代码做了以下更改,现在可以使用:
$Button[1]。单击()。谢谢你的小费!!谢谢你的反馈,飞溅的碎片。页面上实际上有两个按钮,我需要同时单击这两个按钮,所以上面的解决方案运行良好。。。click()
可以工作,但是为什么
getElementsByTagName(…)[0]不能工作呢?我正在选择数组中的第一项。
$Button = $doc.getElementsByTagName("input") | 
              Where-Object {$_.Name -eq "refreshBtn"}
if( $Button -is 'Object[]' )
{
    Write-Error ('Found multiple <refreshBtn> buttons.')
}