2013-03-21 215 views
11
$ie = New-Object -com internetexplorer.application 

每次我打开一个新的网站,它是在一个新的IE窗口中打开该对象(即脚本运行时,每一次),我不希望它这样做。我希望它在新选项卡中打开,但在以前打开的IE窗口中也是如此。我想在脚本下次运行时重用此对象。我不想创建一个新对象打开选项卡

那么有没有什么办法来检查Internet Explorer的实例,并重新使用它的实例?

我想这是一个解决方案:

首先,你必须附加到已经运行的Internet Explorer实例:

$ie = (New-Object -COM "Shell.Application").Windows() ` 
    | ? { $_.Name -eq "Windows Internet Explorer" } 

然后你导航到新的URL。如果这一网址被打开通过Flags参数控制:

$ie.Navigate("http://www.google.com/", 2048) 

但我不能够调用navigate方法这个新创建的对象$ie上。

回答

10

您可以使用Start-Process来打开URL。如果浏览器窗口已经打开,它将作为一个选项卡打开。

Start-Process 'http://www.microsoft.com' 
+3

这假定Internet Explorer是默认的Web浏览器。 – 2013-06-27 08:14:17

+0

我很确定'Start-Process'只是将URL发送到系统上的默认浏览器。它适用于Firefox,作为我的默认浏览器。 – aphoria 2013-06-27 11:43:14

+0

是的,它在默认浏览器,Chrome浏览器,FF,IE或其他浏览器中打开。然而,问题集中在IE,所以我只想指出,IE必须设置为默认浏览器。 – 2013-06-27 16:40:04

8

首先,你必须附加到已经运行的Internet Explorer实例:

$ie = (New-Object -COM "Shell.Application").Windows() ` 
     | ? { $_.Name -eq "Windows Internet Explorer" } 

然后你Navigate到新的URL。其中该URL被打开经由Flags参数控制:

$ie.Navigate("http://www.google.com/", 2048) 

编辑:在情况2个或多个IE实例正在运行(其他标签计数作为附加实例,以及)枚举将返回一个数组,所以您必须从阵列中选择特定实例:

$ie[0].Navigate("http://www.google.com/", 2048) 
+0

**,但中号没有能够把这个新创建的对象的导航方法即。 on $ ie ** – Rohit2194017 2013-03-25 06:17:54

+0

IE对象不是新创建的。你究竟“不能调用'Navigate'方法?你有错误吗?第一个命令是否返回一个对象? '$ ie.GetType()'和'$ ie |的输出是什么? GET-Member'? – 2013-03-25 08:31:45

+0

第一个命令成功了,它返回了同样类型的对象,我已经用get-member检查过了,对象创建时一切都很好,但仍然无法调用导航功能,它显示一个错误,它是给出如下: 方法调用失败,因为[System.Objec在行:1 char:14 + $ ie3.navigate <<<<(“www.google。com“)+ CategoryInfo:InvalidOperation + FullyQualifiedErrorId:MethodNotFound – Rohit2194017 2013-03-25 09:38:16

2

你可以使用这个如果Internet Explorer不是默认的浏览器:

Function Open-IETabs { 
    param (
     [string[]]$Url 
    ) 
    begin { 
     $Ie = New-Object -ComObject InternetExplorer.Application 
    } 
    process { 
     foreach ($Link in $Url) { 
      $Ie.Navigate2($Link, 0x1000) 
     } 
    } 
    end { 
     $Ie.Visible = $true 
    } 
} 

我发现这对PowerShell.com