Question

I have following code which I call from my C#.net service which results in calling the powershell script twice.

using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
      runspace.Open();

      runspace.SessionStateProxy.SetVariable("scriptpath", scriptPath);
      runspace.SessionStateProxy.SetVariable("DBRecordKey", reportId.Key);
      runspace.SessionStateProxy.SetVariable("SymbolPath", symbolPath);
      Logger.Log("DBRecordKey = " + reportId.Key, writer);
      using (Pipeline pipeline = runspace.CreatePipeline(scriptText))
      {
             //Here's how you add a new script with arguments
             pipeline.Commands.AddScript(scriptText);

             // Execute PowerShell script
             Collection<PSObject> results = pipeline.Invoke();

             StringBuilder outputString = new StringBuilder();
             foreach (PSObject obj in results)
             {
                     outputString.AppendLine(obj.ToString());
             }
             Logger.Log("outputString 2 - " + outputString, writer);
             pipeline.Stop();
             runspace.Close();
      }
}

Is there anything wrong with my code?

Was it helpful?

Solution

You're specifying the script both in CreatePipeline(scriptText) and AddScript(scriptText). I'm not a Powershell user, but I'd suggest that either you want

using (Pipeline pipeline = runspace.CreatePipeline())
{
    pipeline.Commands.AddScript(scriptText);
    ...
}

... or you want to remove the AddScript call entirely. If there's a particular reason you need AddScript, then creating the pipeline without the scriptText seems the logical approach.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top