【问题标题】:Set via C# Powershell Variable通过 C# Powershell 变量设置
【发布时间】:2013-10-30 09:16:47
【问题描述】:

我必须通过 C# 在 PowerShell 中设置一个变量,并且必须再次通过 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");
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 中使用它吗?

【问题讨论】:

    标签: c# variables powershell


    【解决方案1】:

    关于设置变量,您的第二个代码块按预期工作,以下是在 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];
    

    【讨论】:

    • 感谢您的回答。但我不想在 C# 中获取变量。我想在 powershell 中设置它,然后通过 C# 在 powershell 中使用它。
    【解决方案2】:

    另一种方法。

    设置变量:

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

    获取变量:

    object myvar = GetVariableValue("TestVar");
    

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 2012-05-31
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多