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