包含在脚本文件中并从C#

时间:2017-09-29 12:28:12

标签: c# powershell

我正在尝试从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();
    }
}

1 个答案:

答案 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";