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