C# 如何通过C将参数传递给PowerShell#

C# 如何通过C将参数传递给PowerShell#,c#,powershell,C#,Powershell,我在通过C向PowerShell传递参数时遇到问题# 我得到以下例外情况: “提示用户的命令失败,因为主机程序或 命令类型不支持用户交互。请尝试主机程序 支持用户交互的,如Windows PowerShell控制台 或Windows PowerShell ISE,并从中删除与提示相关的命令 不支持用户交互的命令类型,如Windows PowerShell工作流” 政务司司长: 我错过了什么?我怎样才能做到这一点呢?例外情况与参数无关。不要使用要求实现主机UI的命令(Write host包括在内)

我在通过C向PowerShell传递参数时遇到问题#

我得到以下例外情况:

“提示用户的命令失败,因为主机程序或 命令类型不支持用户交互。请尝试主机程序 支持用户交互的,如Windows PowerShell控制台 或Windows PowerShell ISE,并从中删除与提示相关的命令 不支持用户交互的命令类型,如Windows PowerShell工作流”

政务司司长:


我错过了什么?我怎样才能做到这一点呢?

例外情况与参数无关。不要使用要求实现主机UI的命令(
Write host
包括在内),或者实现您自己的自定义主机(
PSHost
)和此UI(
PSHostUserInterface
)。下面是一个简单主机的示例(如果您选择这种方式,MSDN上还有更多关于此的内容):

对于简单的任务来说,用UI实现主机可能太多了。您可以简单地考虑用相同的参数定义函数<代码>写主机< /代码>,并实现它,使其在您的特定情况下工作(例如<代码> [控制台]:WrreLead(…)< />代码>)。应该在脚本中定义此函数,或者更好地以不同的方式使其可用,例如,使用全局范围中定义的函数调用另一个脚本

另外,如果您有自定义主机,则使用一个以主机实例为参数的
CreateRunspace()
重载来链接主机和运行空间

private static void RunPowershellScript(string scriptFile, string scriptParameters)
{
    string scriptParameters = "param1 param2";

    RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
    Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
    runspace.Open();
    RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
    Pipeline pipeline = runspace.CreatePipeline();
    Command scriptCommand = new Command(scriptFile);
    Collection<CommandParameter> commandParameters = new Collection<CommandParameter>();
    foreach (string scriptParameter in scriptParameters.Split(' '))
    {
        CommandParameter commandParm = new CommandParameter(null, scriptParameter);
        commandParameters.Add(commandParm);
        scriptCommand.Parameters.Add(commandParm);
    }
    pipeline.Commands.Add(scriptCommand);
    Collection<PSObject> psObjects;
    psObjects = pipeline.Invoke();
}
Function Foo ($arg1, $arg2)
{
    Write-Host $arg1
    Write-Host $arg2
}
Foo $args[0] $args[1]