Calling Powershell functions from C# Calling Powershell functions from C# powershell powershell

Calling Powershell functions from C#


Here's the equivalent C# code for the code mentioned above

string script = "function Test-Me($param1, $param2) { \"Hello from Test-Me with $param1, $param2\" }";using (var powershell = PowerShell.Create()){    powershell.AddScript(script, false);    powershell.Invoke();    powershell.Commands.Clear();    powershell.AddCommand("Test-Me").AddParameter("param1", 42).AddParameter("param2", "foo");    var results = powershell.Invoke();}


It is possible and in more than one ways. Here is probably the simplest one.

Given our functions are in the MyFunctions.ps1 script (just one for this demo):

# MyFunctions.ps1 contains one or more functionsfunction Test-Me($param1, $param2){    "Hello from Test-Me with $param1, $param2"}

Then use the code below. It is in PowerShell but it is literally translatable to C# (you should do that):

# create the engine$ps = [System.Management.Automation.PowerShell]::Create()# "dot-source my functions"$null = $ps.AddScript(". .\MyFunctions.ps1", $false)$ps.Invoke()# clear the commands$ps.Commands.Clear()# call one of that functions$null = $ps.AddCommand('Test-Me').AddParameter('param1', 42).AddParameter('param2', 'foo')$results = $ps.Invoke()# just in case, check for errors$ps.Streams.Error# process $results (just output in this demo)$results

Output:

Hello from Test-Me with 42, foo

For more details of the PowerShell class see:

http://msdn.microsoft.com/en-us/library/system.management.automation.powershell