Dustin Saunders
asked on
c# PowerShell runspace woes
I have the following code, and an issue with it. Starting with the PowerShell block:
The powershell script works independently, but when I run it from the c# runspace I get the following error:
Any ideas why Powershell can't use this cmdlet when invoked via my c# app?
Thanks,
Import-Module RemoteDesktop
$ConnBroker = (Get-RDConnectionBrokerHighAvailability -ConnectionBroker "dm3us050.dm3.wizmoworks.net").ActiveManagementServer
Set-RDSessionHost -SessionHost $server -ConnectionBroker $ConnBroke -NewConnectionAllowed $action
And the following c# code: public static void RunPowershellCommand(string scriptPath, string[,] variables = null)
{
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
//scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted");
Pipeline pipeline = runspace.CreatePipeline();
Command myCommand = new Command(scriptPath, false);
if (variables[0, 0] != null)
{
for (int i = 0; i < variables.GetLength(0); i++) //Add all the powershell variables we might need in the partner specific.
{
runspace.SessionStateProxy.SetVariable(variables[i, 0], variables[i, 1]);
}
}
pipeline.Commands.Add(myCommand);
Collection<PSObject> psObjects;
psObjects = pipeline.Invoke();
runspace.Close();
}
The powershell script works independently, but when I run it from the c# runspace I get the following error:
{"The term 'Get-RDConnectionBrokerHighAvailabil ity' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again."}
Any ideas why Powershell can't use this cmdlet when invoked via my c# app?
Thanks,
ASKER
That seems to work for executing the code, but it doesn't pass the variables through- is there a way I can dump the variables I pass to the script in the sub process? (doesn't look like I can add any -args)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hey, that was incredibly helpful. Thanks, greatly appreciated!
happy to help!.. :-)
Check the version of PowerShell when you invoke it from you app. I have see similar issues with our orchestrator server .net activity tasks, as it invokes/executes it’s commands still in PowerShell 2.0 instead of PS version installed on the computer.
As a work around, we are running the script in a sub process, example..
$Result = PowerShell { <Script Here> }
Check and see if there is a difference when you try these commands inside your app..
PowerShell {$Host.Version}
$Host.Version
Or it's possible that the RemoteDesktop module file is not accessible for the user account which you use to run the application/script.
To check the access issue, copy the module folder from default module path C:\Windows\system32\Window