【问题标题】:How to pass arguments to PowerShell via C#如何通过 C# 将参数传递给 PowerShell
【发布时间】:2023-03-11 08:45:02
【问题描述】:

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

我收到以下异常:

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

cs:

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();
}

ps:

Function Foo ($arg1, $arg2)
{
    Write-Host $arg1
    Write-Host $arg2
}
Foo $args[0] $args[1]

我在这里缺少什么?我怎样才能做到这一点?

【问题讨论】:

    标签: c# powershell


    【解决方案1】:

    例外与参数无关。要么不使用需要实现主机 UI(包括Write-Host)的命令,要么实现你自己的自定义主机(PSHost)和这个 UI(PSHostUserInterface)。这是一个简单主机的示例(如果您选择这种方式,MSDN 上有更多关于此的内容): http://msdn.microsoft.com/en-us/library/windows/desktop/ee706559(v=vs.85).aspx

    对于简单的任务,使用 UI 实现主机可能太多了。您可以考虑简单地定义一个具有相同参数的函数Write-Host 并实现它,以便它在您的特定情况下工作(例如[Console]::WriteLine(...))。这个函数应该在脚本中定义或者更好地以不同的方式提供给它,例如调用在全局范围内定义的另一个脚本。

    附:如果您有自定义主机,请使用 CreateRunspace() 重载之一,该重载将主机实例作为参数,以链接主机和运行空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 2012-05-05
      相关资源
      最近更新 更多