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

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.

How to run GPResult on a remote client with PowerShell

In the past, to run the GPResult command, you would need to either physically visit this client, have the user do it, or use and RDP connection.  In all cases, this will disrupt the user.  First, you need PowerShell remoting enabled on the target machine.  You can do this via Group Policy . Open PowerShell and type this command. Invoke-Command –ScriptBlock {GPResult /r} –ComputerName <ComputerName> Replace <ComputerName> with the name of the target.  Remember, the target needs to be online and accessible to you.

Error icon when creating a GPO Preference drive map

You may not have an error at all.  Take a look at the drive mapping below. The red triangle is what threw us off.  It is not an error.  It is simply a color representation of the Replace option of the Action field in the properties of the drive mappings. Create action This give you a green triangle. The Create action creates a new mapped drive for users. Replace Action The Replace action gives you a red triangle.  This action will delete and recreate mapped drives for users. The net result of the Replace action is to overwrite all existing settings associated with the mapped drive. If the drive mapping does not exist, then the Replace action creates a new drive mapping. Update Action The Update action will have a yellow triangle. Update will modify settings of an existing mapped drive for users. This action differs from Replace in that it only updates settings defined within the preference item. All other settings remain as configured on the ma...