Skip to main content

How to close a selected instance of Internet Explorer

Yesterday in my PowerShell class we were doing a lab on object enumeration.  I took a few minutes to take a look at the forums on PowerShell.com and found a question that related directly to our lab content.  Here is the scenario.

This individual needed to close an instance of Internet Explorer.  The problem is that there were multiple instances open.  He needed a way to select a specific instance.  Using the Get-Process cmdlet, you can grab each instance, but the process object does not contain anything useful to isolate a particular instance. So I tried a different approached.

I opened an IE instance and went to PowerShell.com.  I then executed the code below.

(New-Object -COM "Shell.Application").Windows() |
    Where-Object LocationName -like "PowerShell*"

Here is the result.
Application          : System.__ComObject
Parent               : System.__ComObject
Container            :
Document             : mshtml.HTMLDocumentClass
TopLevelContainer    : True
Type                 : HTML Document
Left                 : 56
Top                  : 161
Width                : 936
Height               : 641
LocationName         : PowerShell.com – PowerShell Scripts, Tips, Forums, and Resources
LocationURL          : http://powershell.com/cs/
Busy                 : False
Name                 : Internet Explorer
HWND                 : 1249664
FullName             : C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE
Path                 : C:\Program Files (x86)\Internet Explorer\
Visible              : True
StatusBar            : True
StatusText           :
ToolBar              : 1
MenuBar              : True
FullScreen           : False
ReadyState           : 4
Offline              : False
Silent               : False
RegisterAsBrowser    : False
RegisterAsDropTarget : True
TheaterMode          : False
AddressBar           : True
Resizable            : True

Examining the LocationName property, I can see that I am referencing the correct instance.  Next, I sent the object to Get-Member.
    TypeName: System.__ComObject#{d30c1661-cdaf-11d0-8a3e-00c04fc9e26e}

Name                 MemberType Definition                                                 
----                 ---------- ----------                                                 
ClientToWindow       Method     void ClientToWindow (int, int)                             
ExecWB               Method     void ExecWB (OLECMDID, OLECMDEXECOPT, Variant, Variant)    
GetProperty          Method     Variant GetProperty (string)                               
GoBack               Method     void GoBack ()                                             
GoForward            Method     void GoForward ()                                          
GoHome               Method     void GoHome ()                                              
GoSearch             Method     void GoSearch ()                                           
Navigate             Method     void Navigate (string, Variant, Variant, Variant, Variant) 
Navigate2            Method     void Navigate2 (Variant, Variant, Variant, Variant, Variant)
PutProperty          Method     void PutProperty (string, Variant)                         
QueryStatusWB        Method     OLECMDF QueryStatusWB (OLECMDID)                           
Quit                 Method     void Quit ()                                               
Refresh              Method     void Refresh ()                                            
Refresh2             Method     void Refresh2 (Variant)                                     
ShowBrowserBar       Method     void ShowBrowserBar (Variant, Variant, Variant)            
Stop                 Method     void Stop ()                                               
AddressBar           Property   bool AddressBar () {get} {set}                             
Application          Property   IDispatch Application () {get}                             
Busy                 Property   bool Busy () {get}                                         
Container            Property   IDispatch Container () {get}                               
Document             Property   IDispatch Document () {get}                                
FullName             Property   string FullName () {get}                                   
FullScreen           Property   bool FullScreen () {get} {set}                             
Height               Property   int Height () {get} {set}                                  
HWND                 Property   int HWND () {get}                                           
Left                 Property   int Left () {get} {set}                                    
LocationName         Property   string LocationName () {get}                               
LocationURL          Property   string LocationURL () {get}                                
MenuBar              Property   bool MenuBar () {get} {set}                                
Name                 Property   string Name () {get}                                       
Offline              Property   bool Offline () {get} {set}                                
Parent               Property   IDispatch Parent () {get}                                  
Path                 Property   string Path () {get}                                       
ReadyState           Property   tagREADYSTATE ReadyState () {get}                          
RegisterAsBrowser    Property   bool RegisterAsBrowser () {get} {set}                      
RegisterAsDropTarget Property   bool RegisterAsDropTarget () {get} {set}                   
Resizable            Property   bool Resizable () {get} {set}                              
Silent               Property   bool Silent () {get} {set}                                 
StatusBar            Property   bool StatusBar () {get} {set}                              
StatusText           Property   string StatusText () {get} {set}                           
TheaterMode          Property   bool TheaterMode () {get} {set}                             
ToolBar              Property   int ToolBar () {get} {set}                                 
Top                  Property   int Top () {get} {set}                                     
TopLevelContainer    Property   bool TopLevelContainer () {get}                            
Type                 Property   string Type () {get}                                       
Visible              Property   bool Visible () {get} {set}                                
Width                Property   int Width () {get} {set}   

There is a Quit method.  In class, we are using ForEach-Object to execute object methods, so I just added a little code from class.

(New-Object -COM "Shell.Application").Windows() |
    Where-Object LocationName -like "PowerShell*" |
    ForEach-Object -MemberName Quit

This closed the instance of IE that was on PowerShell.com.  I also did this when PowerShell.com was opened in a tab among several other websites in the same instance.  No problem.  Only that tab closed.


Comments

Popular posts from this blog

Adding a Comment to a GPO with PowerShell

As I'm writing this article, I'm also writing a customization for a PowerShell course I'm teaching next week in Phoenix.  This customization deals with Group Policy and PowerShell.  For those of you who attend my classes may already know this, but I sit their and try to ask the questions to myself that others may ask as I present the material.  I finished up my customization a few hours ago and then I realized that I did not add in how to put a comment on a GPO.  This is a feature that many Group Policy Administrators may not be aware of. This past summer I attended a presentation at TechEd on Group Policy.  One organization in the crowd had over 5,000 Group Policies.  In an environment like that, the comment section can be priceless.  I always like to write in the comment section why I created the policy so I know its purpose next week after I've completed 50 other tasks and can't remember what I did 5 minutes ago. In the Group Policy module for PowerShell V3, th

Return duplicate values from a collection with PowerShell

If you have a collection of objects and you want to remove any duplicate items, it is fairly simple. # Create a collection with duplicate values $Set1 = 1 , 1 , 2 , 2 , 3 , 4 , 5 , 6 , 7 , 1 , 2   # Remove the duplicate values. $Set1 | Select-Object -Unique 1 2 3 4 5 6 7 What if you want only the duplicate values and nothing else? # Create a collection with duplicate values $Set1 = 1 , 1 , 2 , 2 , 3 , 4 , 5 , 6 , 7 , 1 , 2   #Create a second collection with duplicate values removed. $Set2 = $Set1 | Select-Object -Unique   # Return only the duplicate values. ( Compare-Object -ReferenceObject $Set2 -DifferenceObject $Set1 ) . InputObject | Select-Object – Unique 1 2 This works with objects as well as numbers.  The first command creates a collection with 2 duplicates of both 1 and 2.   The second command creates another collection with the duplicates filtered out.  The Compare-Object cmdlet will first find items that are diffe

How to list all the AD LDS instances on a server

AD LDS allows you to provide directory services to applications that are free of the confines of Active Directory.  To list all the AD LDS instances on a server, follow this procedure: Log into the server in question Open a command prompt. Type dsdbutil and press Enter Type List Instances and press Enter . You will receive a list of the instance name, both the LDAP and SSL port numbers, the location of the database, and its status.