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
Ok "byte[] bytes = {2,5,2,4};" muss natürlich vor Parameter.Add.
Allerdings kommt nach wie vor nichts zurück 😦
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 😉