Wie kann ich ein Objekt oder mehrere Werte von PowerShell zur Ausführung von C # -Code zurückgeben?
Einige C # -Codes führen ein Powershell-Skript mit Argumenten aus. Ich möchte einen Returncode und einen String von Powershell erhalten, um zu erfahren, ob im Powershell-Skript alles in Ordnung war.
Was ist der richtige Weg, um das zu tun - sowohl in Powershell als auch in C #
Power Shell<code># Powershell script # --- Do stuff here --- # Return an int and a string - how? # In c# I would do something like this, if this was a method: # class ReturnInfo # { # public int ReturnCode; # public string ReturnText; # } # return new ReturnInfo(){ReturnCode =1, ReturnText = "whatever"}; </code>C #
<code>void RunPowershellScript(string scriptFile, List<string> parameters) { RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration)) { runspace.Open(); RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); Pipeline pipeline = runspace.CreatePipeline(); Command scriptCommand = new Command(scriptFile); Collection<CommandParameter> commandParameters = new Collection<CommandParameter>(); foreach (string scriptParameter in parameters) { CommandParameter commandParm = new CommandParameter(null, scriptParameter); commandParameters.Add(commandParm); scriptCommand.Parameters.Add(commandParm); } pipeline.Commands.Add(scriptCommand); Collection<PSObject> psObjects; psObjects = pipeline.Invoke(); //What to do here? //ReturnInfo returnInfo = pipeline.DoMagic(); } } class ReturnInfo { public int ReturnCode; public string ReturnText; } </code>
Ich habe es geschafft, dies mit Write-Output zu tun und mich dabei auf Konventionen wie "Die letzten beiden psObjects sind die Werte, nach denen ich suche" zu verlassen, aber es würde sehr leicht brechen.