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

ogni volta che apro un nuovo sito web con questo oggetto (ovvero ogni volta in cui viene eseguito lo script) si apre in una nuova finestra di IE e io non voglio che faccia quello. Voglio che venga aperto in una nuova scheda, ma anche in una finestra di IE aperta in precedenza. Voglio riutilizzare questo oggetto quando lo script viene eseguito la prossima volta. Non voglio creare un nuovo oggettoApre la scheda in caso di IE esistente

Quindi c'è un modo per controllare le istanze di Internet Explorer e riutilizzarne l'istanza ???

ho provato questo come una soluzione:

In primo luogo si deve allegare al già in esecuzione istanza di Internet Explorer:

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

Poi si passa al nuovo URL. Dove tale URL viene aperto è controllato tramite il parametro Flags:

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

ma non sono in grado di chiamare navigate metodo su questo oggetto appena creato $ie.

risposta

10

È possibile utilizzare Start-Process per aprire l'URL. Se una finestra del browser è già aperta, si aprirà come una scheda.

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

Ciò presuppone che Internet Explorer sia il browser Web predefinito. –

+0

Sono abbastanza sicuro che 'Start-Process' invia l'URL a qualunque browser predefinito si trovi nel sistema. Funziona con Firefox come browser predefinito. – aphoria

+0

Sì, si apre nel browser predefinito, Chrome, FF, IE o altro. Tuttavia, la domanda era incentrata su IE, quindi volevo solo sottolineare che IE deve essere impostato sul browser predefinito. –

8

In primo luogo si deve allegare al già in esecuzione istanza di Internet Explorer:

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

Poi si Navigate al nuovo URL. Dove viene aperta viene controllata tramite il parametro Flags che URL:

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

Edit: Nel caso 2 o più istanze di IE sono in esecuzione (schede aggiuntive contare casi come ulteriori pure) l'enumerazione restituirà un array, così è necessario selezionare una particolare istanza dalla matrice:

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

** ma non m in grado di chiamare il metodo navigare su questo oggetto appena creato , cioè. on $ ie ** – Rohit2194017

+0

L'oggetto IE non è stato appena creato. Come esattamente "non sei in grado di chiamare il metodo' Navigate' "? Hai un errore? Il primo comando restituisce un oggetto? Qual è l'output di '$ ie.GetType()' e '$ ie | Get-Member'? –

+0

il primo comando ha avuto successo e ha restituito l'oggetto dello stesso tipo, l'ho già controllato con get-member, tutto sembra andare bene con la creazione dell'oggetto ma ancora non è in grado di chiamare la funzione di navigazione, mostra un errore che è di seguito: Invocazione del metodo non riuscita perché [System.Objec Alla riga: 1 carattere: 14 + $ ie3.navigate <<<< ("www.google.com ") + CategoryInfo: InvalidOperation + FullyQualifiedErrorId: MethodNotFound – Rohit2194017

2

È possibile utilizzare questo se Internet Explorer non è il browser predefinito:

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 
    } 
} 

Ho trovato questo su PowerShell.com

Problemi correlati