Maga a Windows grafikus keretprogramja, shellje is COM objektum, azaz megszólítható, a publikus metódusai és tulajdonságai meghívhatók, lekérdezhetőek. Ehhez először meg kell hívni az shellt, ezt a PowerShellben nagyon egyszerűen, a new-object –com commandlettel tehetjük meg:
[2] PS C:\> $sh = new-object -com Shell.Application
Miután ezt az objektumot még többször akarom használni, ezért egy $sh változóba tettem. Nézzük meg ennek tagjellemzőit:
[3] PS C:\> $sh | gm
TypeName: System.__ComObject#{efd84b2d-4bcf-4298-be25-eb542a59fbda}
Name MemberType Definition
---- ---------- ----------
AddToRecent Method void AddToRecent (Variant, string)
BrowseForFolder Method Folder BrowseForFolder (int, string, int...
CanStartStopService Method Variant CanStartStopService (string)
CascadeWindows Method void CascadeWindows ()
ControlPanelItem Method void ControlPanelItem (string)
EjectPC Method void EjectPC ()
Explore Method void Explore (Variant)
ExplorerPolicy Method Variant ExplorerPolicy (string)
FileRun Method void FileRun ()
FindComputer Method void FindComputer ()
FindFiles Method void FindFiles ()
FindPrinter Method void FindPrinter (string, string, string)
GetSetting Method bool GetSetting (int)
GetSystemInformation Method Variant GetSystemInformation (string)
Help Method void Help ()
IsRestricted Method int IsRestricted (string, string)
IsServiceRunning Method Variant IsServiceRunning (string)
MinimizeAll Method void MinimizeAll ()
NameSpace Method Folder NameSpace (Variant)
Open Method void Open (Variant)
RefreshMenu Method void RefreshMenu ()
ServiceStart Method Variant ServiceStart (string, Variant)
ServiceStop Method Variant ServiceStop (string, Variant)
SetTime Method void SetTime ()
ShellExecute Method void ShellExecute (string, Variant, Vari...
ShowBrowserBar Method Variant ShowBrowserBar (string, Variant)
ShutdownWindows Method void ShutdownWindows ()
Suspend Method void Suspend ()
TileHorizontally Method void TileHorizontally ()
TileVertically Method void TileVertically ()
ToggleDesktop Method void ToggleDesktop ()
TrayProperties Method void TrayProperties ()
UndoMinimizeALL Method void UndoMinimizeALL ()
Windows Method IDispatch Windows ()
WindowsSecurity Method void WindowsSecurity ()
Application Property IDispatch Application () {get}
Parent Property IDispatch Parent () {get}
Ezzel láthatóvá váltak a Shell.Application tagjellemzői, azaz a Windows szkriptből is könnyen elérhető szolgáltatásai, mint például a súgó megnyitása vagy akár egy mappa megnyitása a Windows Intézőben:
[4] PS C:\> $sh.help()
[5] PS C:\> $sh.explore("C:\scripts")
Természetesen az így megnyitott Súgóval vagy az Intézővel olyan sok mindent nem tudunk PowerShellel továbbiakban kezdeni, ez inkább csak a COM objektumok kezelésének a legegyszerűbb és látványos demonstrációja akart lenni. Sokkal praktikusabb lett volna például a ShutdownWindows metódus meghívása, de ezt a tisztelt olvasóra bízom J.
Ami tényleg hasznos (lenne) itt, az az ablakok listázása, azaz azon processzeket tudjuk ezzel kiszűrni, amelyekhez ablaki is tartozik:
[6] PS C:\> $sh = New-Object -ComObject Shell.Application
[7] PS C:\> $sh.Windows() | ft name, fullname -AutoSize
Name FullName
---- --------
Windows Internet Explorer C:\Program Files (x86)\Internet Explorer\iexplore...
Windows Internet Explorer C:\Program Files (x86)\Internet Explorer\iexplore...
Windows Internet Explorer C:\Program Files (x86)\Internet Explorer\iexplore...
Windows Internet Explorer C:\Program Files (x86)\Internet Explorer\iexplore...
Azonban itt meg az a baj, hogy csak a 32 bites COM alkalmazásokat listázza ki…