Laden...

In C# powershell-Code ausführen und Paramter übergeben.

Erstellt von Axel21 vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.750 Views
A
Axel21 Themenstarter:in
3 Beiträge seit 2017
vor 6 Jahren
In C# powershell-Code ausführen und Paramter übergeben.

Hallo,

ich möchte gerne Remote ein Powershellscript in meinem C#-Programm ausführen. Allerdings bekomme ich es nicht hin, Parameter vom c# code zum Skript hinzuzufügen. Bisher bin ich soweit gekommen:

         PSCredential credential = new PSCredential("userXy", secureString);

	string script = \n" +
           "param ([Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]\n" +
           "[byte[]] $zahlen  = Args[0]  \n" +
           ")"+
           " return $zahlen" ;


		    string computerName = "Computer1";
           string serverName = "server33.sse.se-domain.com";
           var remoteComputer = new Uri(String.Format("{0}://{1}:5985/wsman", "http", serverName));

           var connection = new WSManConnectionInfo(remoteComputer, "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential );

           var runspace = RunspaceFactory.CreateRunspace(connection);
           runspace.Open();
           
           var powershell = PowerShell.Create();
           powershell.Runspace = runspace;
		   
		   powershell.AddScript(script);
		   powershell.AddParameters("$zahlen", bytes)

		   byte[] bytes = {2,5,2,4};
		   
		   IAsyncResult async = powershell.BeginInvoke();
           string result = "";
           foreach (PSObject ob in powershell.EndInvoke(async))
           {
               result += ob;
           }
		   Console.WriteLine(result);

Bei diesem simplen Beispiel sollen 4 zahlen als Parameter übergeben werden und genauso wieder zurück geben und anschließend am Bildschirm ausgegeben werden. Allerding funktioniert der Quellcode nicht. Anscheinend werden die Parameter nicht übergeben. Weiß jemand weiter?

Viele Grüße

Axel21

F
10.010 Beiträge seit 2004
vor 6 Jahren

Schau doch mal wann du welche Variable setzt.

A
Axel21 Themenstarter:in
3 Beiträge seit 2017
vor 6 Jahren

Ok "byte[] bytes = {2,5,2,4};" muss natürlich vor Parameter.Add.
Allerdings kommt nach wie vor nichts zurück 😦

127 Beiträge seit 2015
vor 6 Jahren

Probier doch mamal bitte anstatt

powershell.AddParameters("$zahlen", bytes)

die Variable ohne das $ Symbol.
Also so:

powershell.AddParameters("zahlen", bytes)

Im Powershell Script die aber weiterhin die $zahlen verwenden!

Und dein Powershell Script sollte so aussehen:

param ([Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)] [byte[]] $zahlen)
return $zahlen

Also ohne das Args[0]

Idealerweise testest du das Script mal außerhalb deines Codes ob es das tut was du erwartest und versuchst es dann über deinen Code anzusteuern um eine Mischung von diversen Problemen zu vermeiden. Nur so als Vorschlag 😉