Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 427
  • Last Modified:

c# PowerShell runspace woes

I have the following code, and an issue with it.  Starting with the PowerShell block:
Import-Module RemoteDesktop
$ConnBroker = (Get-RDConnectionBrokerHighAvailability -ConnectionBroker "dm3us050.dm3.wizmoworks.net").ActiveManagementServer
Set-RDSessionHost -SessionHost $server -ConnectionBroker $ConnBroke -NewConnectionAllowed $action

Open in new window

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();
        }

Open in new window


The powershell script works independently, but when I run it from the c# runspace I get the following error:
{"The term 'Get-RDConnectionBrokerHighAvailability' 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,
1
Dustin Saunders
Asked:
Dustin Saunders
  • 3
  • 2
1 Solution
 
SubsunCommented:
My two cents :
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\WindowsPowerShell\v1.0\Modules\ to C:\Users\<UserName>\Documents\WindowsPowerShell\Modules and try to run app..
0
 
Dustin SaundersDirector of OperationsAuthor Commented:
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)
0
 
SubsunCommented:
-Args should work.. Try..
Powershell.exe {Write-host $Args[0] $Args[1]} -Args $message,$message1

Or

Powershell.exe {Param($message,$Message1) Write-host $Message $Message1} -Args $message,$message1

Open in new window

0
 
Dustin SaundersDirector of OperationsAuthor Commented:
Hey, that was incredibly helpful.  Thanks, greatly appreciated!
0
 
SubsunCommented:
happy to help!.. :-)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Has Powershell sent you back into the Stone Age?

If managing Active Directory using Windows Powershell® is making you feel like you stepped back in time, you are not alone.  For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now