使用C#将参数传递给Powershell

时间:2016-07-12 01:29:40

标签: c# powershell parameters

我有一个C#函数,它实际上异步调用一个powershell 以下是我的代码:

using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddScript(scriptFile,false);
                PowerShellInstance.AddParameter("var", "Value");
                PSDataCollection <PSObject> outputCollection = new PSDataCollection<PSObject>();

                IAsyncResult result = PowerShellInstance.BeginInvoke<PSObject, PSObject>(null, outputCollection);

                while (result.IsCompleted == false)
                {
                    foreach (PSObject outputItem in outputCollection)
                    {
                        System.Console.WriteLine(outputItem.BaseObject.ToString());
                    }
                    System.Console.WriteLine("Waiting for pipeline to finish...");
                    Thread.Sleep(1000);
                }

            }

虽然这就像我所说的那样,但参数的添加似乎并没有做任何事情。我在powershell中强制要求该参数,但没有成功。如果它不是强制性的,它只是起作用而且不会处理参数。

我的Powershell是:

Param(
[Parameter(Mandatory=$False,Position=1)]
[string]$var
)
. "C:\Data\initiate.PS1"
write-output "Value is $var"

输出结果为:

在启动中 - 这来自PS启动脚本

价值是

等待管道完工...

如果我在Powershell中将参数Required设为true,则输出为:

等待管道完工...

我尝试在PowerShellInstance.AddScript中更改其范围,没有用。 这可能看起来像一个重复的问题,但我无法找到解决方案因此在这里问。 用于创建此代码的msdn链接位于: https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

请添加/标记PetSerAl的评论作为答案,对我有用。谢谢

AddScript -> AddCommand