gpt4 book ai didi

c# - Powershell 忽略通过 SessionStateProxy.SetVariable 传递的参数

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:04 26 4
gpt4 key购买 nike

我有以下 Powershell 脚本。

param([String]$stepx="Not Working")
echo $stepx

然后我尝试使用以下 C# 将参数传递给此脚本。

        using (Runspace space = RunspaceFactory.CreateRunspace())
{
space.Open();
space.SessionStateProxy.SetVariable("stepx", "This is a test");

Pipeline pipeline = space.CreatePipeline();
pipeline.Commands.AddScript("test.ps1");

var output = pipeline.Invoke();
}

运行上述代码片段后,输出变量中的值为“not working”。应该是“这是一个测试”。为什么忽略该参数?

谢谢

最佳答案

您将 $stepx 定义为一个变量,这与将值传递给脚本的 $stepx 不同 参数
变量独立于参数存在,并且由于您没有向脚本传递参数,因此它的参数绑定(bind)到它的默认值。

因此,您需要将参数(参数值)传递给脚本的参数:

有点令人困惑的是,脚本 文件 是通过 Command 实例 调用的,您通过其 将参数(参数值)传递给该实例>.参数集合。

相比之下,.AddScript() 用于将字符串添加为 内存内容 em> 脚本(存储在字符串中),即 PowerShell 源代码片段

您可以使用任一种技术来调用带参数的脚本文件,但如果您想使用强类型参数(其值不能可以从它们的字符串表示中明确推断出来),使用基于Command 的方法(注释中提到了 .AddScript() 替代方法):

  using (Runspace space = RunspaceFactory.CreateRunspace())
{
space.Open();

Pipeline pipeline = space.CreatePipeline();

// Create a Command instance that runs the script and
// attach a parameter (value) to it.
// Note that since "test.ps1" is referenced without a path, it must
// be located in a dir. listed in $env:PATH
var cmd = new Command("test.ps1");
cmd.Parameters.Add("stepx", "This is a test");

// Add the command to the pipeline.
pipeline.Commands.Add(cmd);

// Note: Alternatively, you could have constructed the script-file invocation
// as a string containing a piece of PowerShell code as follows:
// pipeline.Commands.AddScript("test.ps1 -stepx 'This is a test'");

var output = pipeline.Invoke(); // output[0] == "This is a test"
}

关于c# - Powershell 忽略通过 SessionStateProxy.SetVariable 传递的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com