Prof. Powershell

Prof. PowerShell: COM-munication

Some COM objects work just fine in PowerShell -- maybe better.

Even though PowerShell is based on .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, too. 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 

Now pipe $shell to Get-Member and you should see all of the methods and properties you were used to working with in VBScript. Try this:

PS C:\> $shell.specialfolders

You should see all 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:\> 
PS C:\> $Shell.regwrite("HKLM\Soft 
dOwner","Jeff Hicks")
PS C:\> $Shell.regread("HKLM\Soft 
dOwner")Jeff Hicks

Having access to these methods provides a transition to moving completely to PowerShell. But sometimes the older ways still work just fine:

PS C:\> $network=new-object -COM " 
PS C:\> $network.EnumNetworkDrives()

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.filesyste
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 objects, 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 apps -- such as Word, Excel or even Apple 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, and a frequent speaker at technology conferences and user groups.


  • Microsoft Buys Orions Systems To Enhance Vision AI Capabilities in Dynamics 365

    Microsoft announced on Tuesday that it has acquired Orions Systems with the aim of enhancing Dynamics 365 capabilities, as well as the Microsoft Power Platform.

  • Microsoft Hires Movial To Build Android OS for Microsoft Devices

    Microsoft has hired the Romanian operations of software engineering and design services company Movial to develop an Android-based operating system solution for the Microsoft Devices business segment.

  • Microsoft Ending Workflows for SharePoint 2010 Online Next Month

    Microsoft on Monday gave notice that it will be ending support this year for the "workflows" component of SharePoint 2010 Online, as well as deprecating that component for SharePoint 2013 Online.

  • Why Windows Phone Is Dead, But Not Completely Gone

    Don't call it a comeback (because that's not likely). But as Brien explains, there are three ways that today's smartphone market leaves the door open for Microsoft to bring Windows back to smartphones.

comments powered by Disqus

Office 365 Watch

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.