我正在尝试从C#调用脚本文件中包含的powershell函数。 当它是一个字符串变量时,我能够成功调用该函数,但是当我尝试从脚本文件调用它时,我收到此错误:
术语' Test-Me'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。
从C#调用脚本文件函数还需要什么?
public string RunScriptFunction(string userName)
{
//var script = "function Test-Me($param1, $param2) { \"Hello from Test-Me with $param1, $param2\" }";
var script = ". C:\\TestMe.ps1";
using (var powershell = PowerShell.Create())
{
powershell.AddScript(script);
var results1 = powershell.Invoke();
powershell.Commands.Clear();
powershell.AddCommand("Test-Me").AddParameter("param1", userName).AddParameter("param2", "HELLO");
var results = powershell.Invoke();
var stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
}
return stringBuilder.ToString();
}
}
答案 0 :(得分:0)
我可以重现您的问题,即由于执行策略,您无法对PowerShell脚本进行点源。检查属性powershell.Streams.Error
中的错误。它的价值可能是:
无法加载文件C:\ TestMe.ps1,因为在此系统上禁用了运行脚本。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=135170上的about_Execution_Policies。
在这种情况下,一种可能的解决方案是在点源脚本之前为流程范围设置ExecutionPolicy:
var script = "Set-ExecutionPolicy Bypass -Scope Process; . C:\\TestMe.ps1";