How to Embed PowerShell Within a C# Application

Play How to Embed PowerShell Within a C# Application
Sign in to queue


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.



Right click to download this episode

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" ??

Add Your 2 Cents