7

PowerShell で C# を介して変数を設定する必要があり、Powershell で C# を介してその変数を再度使用する必要があります。これまでのコードは次のとおりです。

var command = string.Format("$item = Invoke-RestMethod {0} ", "http://services.odata.org/OData/OData.svc/?`$format=json");
var command2 = string.Format("$item.value[0].name");
InvokeCommand.InvokeScript(command);
object namesOne= InvokeCommand.InvokeScript(command2);

この場合、出力は次のようになります。

しかし、このC#は機能しません。私も疲れています:

Runspace runSpace = RunspaceFactory.CreateRunspace();
runSpace.Open();
Pipeline pipeline = runSpace.CreatePipeline();

Command invoke = new Command("Invoke-RestMethod");
invoke.Parameters.Add("Uri", "http://services.odata.org/OData/OData.svc/?`$format=json");
pipeline.Commands.Add(invoke);

runSpace.SessionStateProxy.SetVariable("item", pipeline.Invoke());
var a = runSpace.SessionStateProxy.PSVariable.GetValue("item");
Command variable = new Command("Write-Host $item");

pipeline.Commands.Add(variable);
var output = pipeline.Invoke();

しかし、どちらも機能しません。Powershell で変数を設定し、常に C# を介して Powershell で作業する方法を知っている人はいますか?

4

2 に答える 2

6

変数の設定に関して、2 番目のコード ブロックは期待どおりに動作します。以下は、 powershell で$itemを FooBar に設定し、これを引き戻して値が正しいことを確認する簡単なテストです。

[Test]
public void PowershellVariableSetTest()
{
    var runSpace = RunspaceFactory.CreateRunspace();
    runSpace.Open();

    runSpace.SessionStateProxy.SetVariable("item", "FooBar");
    var a = runSpace.SessionStateProxy.PSVariable.GetValue("item");

    Assert.IsTrue(a.ToString() == "FooBar");
}

C# から Powershell を直接操作するには、次のようにします。

var command = string.Format("$item = Invoke-RestMethod {0} ", "http://services.odata.org/OData/OData.svc/?`$format=json");
var command2 = string.Format("$item.value[0].name");

var powershell = PowerShell.Create();
powershell.Commands.AddScript(command);
powershell.Commands.AddScript(command2);
var name = powershell.Invoke()[0];
于 2013-10-30T09:52:00.537 に答える
3

それを行う別の方法。

変数を設定:

SessionState.PSVariable.Set("TestVar", "1");

変数を取得:

object myvar = GetVariableValue("TestVar");
于 2015-09-07T03:26:53.440 に答える