PowerShell Professional
COM-unication
If you've written VBscripts, you're familiar with COM objects. Some COM objects work just fine in PowerShell, maybe better.
- By Jeffery Hicks
- 02/03/2009
Even though PowerShell is based on the .NET Framework,
it supports legacy approaches to systems management
including how it uses COM objects. If you've written
VBscripts you've used COM objects for things like
the FileSystemObject, the Shell and Network. The
good news is that you can use those objects in
PowerShell. The best news is that you can work
with the objects interactively without a script!
Open a PowerShell prompt and type:
PS C:\> $shell=new-object -COM
"wscript.shell"
Now pipe $shell to Get-Member and you should
see all of the methods and properties you were
use to working with in VBScript. Try this:
PS C:\> $shell.specialfolders
You should see all of the special Windows folders.
Unfortunately not all COM functionality translates
properly to PowerShell. In VBScript I could use
$shell.specialfolders("desktop") to
retrieve just the desktop folder, but not in PowerShell.
But you can execute methods:
PS C:\> $Shell.regread("HKLM\Software\microsoft\Windows
NT\CurrentVersion\RegisteredOwner")
Admin
PS C:\> $Shell.regwrite("HKLM\Software\microsoft\Windows
NT\CurrentVersion\RegisteredOwner","Jeff
Hicks")
PS C:\> $Shell.regread("HKLM\Software\microsoft\Windows
NT\CurrentVersion\RegisteredOwner")
Jeff Hicks
Having access to these methods provides a transition
if you need it in moving completely to PowerShell.
And frankly, sometimes the older ways still work
just fine:
PS C:\> $network=new-object -COM
"wscript.network"
PS C:\> $network.EnumNetworkDrives()
P:
\\pluto\files
Or the COM objects offer functionality that you
don't have in PowerShell or perhaps an easier
approach:
PS C:\> $fso=new-object -com "scripting.filesystemobject"
PS C:\> $fso.drives | where {$_.drivetype -eq
2} | Select Path,AvailableSpace,FreeSpace,TotalSize
Path AvailableSpace FreeSpace
TotalSize
---- -------------- ---------
---------
C: 136613888 136613888
4285337600
E: 256651264 256651264
1069253632
Remember we're still working with object so we
can leverage the PowerShell pipeline and take
advantage of the best of both worlds. You'll also
discover that if you want to work with other applications
such as Microsoft Word, Microsoft Excel of even
Apple's iTunes you can with PowerShell and its
support for COM objects. Create a COM object,
pipe it to Get-Member to discover its methods
and properties and start using it immediately
in PowerShell without writing a single line of
script.
About the Author
Jeffery Hicks is an IT veteran with over 25 years of experience, much of it spent as an IT infrastructure consultant specializing in Microsoft server technologies with an emphasis in automation and efficiency. He is a multi-year recipient of the Microsoft MVP Award in Windows PowerShell. He works today as an independent author, trainer and consultant. Jeff has written for numerous online sites and print publications, is a contributing editor at Petri.com, and a frequent speaker at technology conferences and user groups.