我有一个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/
非常感谢任何帮助。
答案 0 :(得分:0)
请添加/标记PetSerAl的评论作为答案,对我有用。谢谢
AddScript -> AddCommand