webby68
webby68

Reputation: 421

Using Windows Powershell to Open Browsers

I'm just learning Powershell. I found a couple of scripts online, modified them to get the files to open in Chrome and IE. The script works except that IE opens with the blank page but doesn't open all the other links in additional tabs as it does in Chrome. Additionally I get the error message below. The behavior I would like to see is every link open in Chrome and IE and then close each browser after a certain amount of time.

Error received:

You cannot call a method on a null-valued expression.
At line:92 char:13
+             $ie.navigate($site );
+             ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Remove-Variable : Cannot find a variable with the name 'ie'.
At line:95 char:13
+             Remove-Variable ie;
+             ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (ie:String) [Remove-Variable], ItemNotFoundException
    + FullyQualifiedErrorId : VariableNotFound,Microsoft.PowerShell.Commands.RemoveVariableCommand

The code is below and the links in the text file are listed below that.

# How long to wait between open site commands
$waitBetweenSitesS = 7;

# How long to wait after a browser's last site before closing its window
$waitBeforeBrowserClose = 7;

# How long to wait between browsers
$waitBetweenBrowsers = 7;

# Name of the file containing the sites to open
$siteUrlFile = "C:\Scripts\URLs.txt";


# Browsers to start
$browsers = @("chrome", "iexplore")

# Start of the script

Function Open-IETabs {
param (
[string[]]$sites )
begin {
$Ie = New-Object -ComObject InternetExplorer.Application }
process {

foreach ($Link in $sites)
{
$Ie.Navigate2($Link, 0x1000)
}
}
end
{
$Ie.Visible = $true }
}
#$path = read-host 'Enter the path of ppm list file'
$sites = gc "C:\Scripts\URLs.txt"
Open-IETabs -Url $sites

# Browsers
   foreach ($browser in $browsers)
   {

# Sites
      $siteCount = 0;
      foreach ($site in $sites)
      {
         $siteCount++;

         if ($siteCount -eq 1)
         {
            if ($browser -eq "chrome" -or $browser -eq "iexplore")
            {
               # Start the browser with an empty tab because the first page load is currently not captured by uberAgent
               $process = Start-Process -PassThru $browser "about:blank"
            }
            else
            {
               # Start the browser with the first site
               $process = Start-Process -PassThru $browser $site
            }

            # Store the browser's main process (the first one started)
            $browserProcess = $process;

            # Wait for the window to open
            while ($process.MainWindowHandle -eq 0)
            {
               Start-Sleep 1
            }

            if ($browser -eq "chrome" -or $browser -eq "firefox")
            {
               # Open the first site in a new tab
               Start-Process $browser $site
            }
         }
         elseif ($browser -eq "iexplore")
         {
            # Additional IE tabs need to be opened differently, or new windows will be created instead

            $navOpenInNewTab = 0x800;

            # Get running Internet Explorer instances
            $app = New-Object -ComObject shell.application;

            # Grab the last opened tab
            $ie = $app.Windows() | Select-Object -Last 1;

            # Open the site in a new tab
            $ie.navigate($site, $navOpenInNewTab);

            # Release the COM objects
            Remove-Variable ie;
            Remove-Variable app;
         }
         else
         {
            # Addition tabs in Chrome/Firefox
            Start-Process $site #$browser 
         }

         Start-Sleep $waitBetweenSitesS;
      }

      Start-Sleep $waitBeforeBrowserClose;

      # Close the browser
      $browserProcess.CloseMainWindow();
      $browserProcess = $null;

      Start-Sleep $waitBetweenBrowsers;

      }

https://mail.google.com/mail/u/0/#inbox
https://docs.google.com/document/d/1hOc4bdEQ1-KJ5wOsiCt4kVQB-xaHuciQY6Y4X_I7dYA/edit
https://www.google.com/maps/
https://twitter.com/
https://onedrive.live.com/edit.aspx?cid=740de493111072ca&page=view&resid=740DE493111072CA!108&parId=740DE493111072CA!106&app=PowerPoint
https://outlook.live.com/mail/inbox
https://www.dropbox.com/h
https://www.nytimes.com/
https://www.nbcnews.com/
https://foxnews.com/

Upvotes: 3

Views: 7239

Answers (1)

hcm
hcm

Reputation: 1020

I was not able to replicate your error. Anyway your code seems overcomplicated for what you are trying to do. I didn't get the Open-IETabs function (as it seems like it should do what your code in the browser-iterations does anyway. Maybe this could be a start:

# How long to wait between open site commands
$waitBetweenSitesS = 7;

# How long to wait after a browser's last site before closing its window
$waitBeforeBrowserClose = 7;

# How long to wait between browsers
$waitBetweenBrowsers = 7;

$sites = 
"https://www.google.com/maps/",
"https://www.nytimes.com/",
"https://www.nbcnews.com/"

# Start of the script

#IEXPLORE
$Ie = New-Object -ComObject InternetExplorer.Application
$ie.visible = $true
foreach ($site in $sites){
    $Ie.Navigate2($site, 0x1000)
    start-sleep -seconds $waitBetweenSitesS
}

Start-Sleep -seconds $waitBetweenBrowsers

#CHROME
$process = Start-Process -PassThru "chrome" "about:blank"
foreach ($site in $sites){
    Start-Process "chrome" $site
    start-sleep -seconds $waitBetweenSitesS
}

Upvotes: 4

Related Questions