How to Embed PowerShell Within a C# Application

Download this episode

Download Video


Join James Brundage, Tester from the Windows PowerShell team, and Bruce Kyle for a quick introduction to how embed PowerShell within your C# application.   

See how you can easily reference the PowerShell assembly and start embedding PowerShell cmdlets inside of a C# application with PowerShell V2.


Sample Code:

using System.Management.Automation;
using System.Management.Automation.Runspaces;

/* Calls the Get-Process PowerShell command and returns the output as a string */

foreach (string str in PowerShell.Create().




NOTE: You'll need to add a reference to the version of PowerShell you have installed in your GAC to the Visual Studio project file. To do so, you'll open the project file as a text file and add the following line into the <ItemGroup> section:

<Reference Include="System.Management.Automation" /> 

For more news, tips, and links to developer training, see the US ISV Community blog.



Available formats for this video:

Actual format may change based on video formats available and browser capability.

    The Discussion

    • User profile image

      One thing I'd be really intreasted in is any guidance on how to make my apps manageble by powershell, how to handle communication from the cmdlet to the app etc.  At the moment I have a WCF service I call from the powershell command but am intreasted on how others do it.





    • User profile image

      Why didn't you guys use a tripod? The tiny screen in the video is very hard to read and the camera shake makes it even harder. Fortunatelly, the code was posted to the right of the video (and the subtitles helped, too), because it was nearly impossible to make it out on the screen. In the end, I think this entire exercise would have been better as a post to a blog.

    • User profile image

      How to handle the scenario of calling Exchange Server 2010 Commandlets and powershell commandlets in C# ??


      Exchange Commandlets require remote runspace to be created for them to run. By doing so, we will not able to run powershell commandlets like "Where-Object" in the same runspace.


      Creating a local runspace would enable us to execute powershell commandlets and not Exchange 2010 commandlets.


      We can maintain separate runspaces, one local runspace to run powershell commandlets and one remote runspace to run Exchange 2010 COmmandlets.


      But, How to execute a pipeline of Exchange 2010 commandlets and powershell commandlets like this: "Get-ExchangeServer | Select-Object Name" ??

    Comments closed

    Comments have been closed since this content was published more than 30 days ago, but if you'd like to send us feedback you can Contact Us.