使用c#将参数传递给powershell

时间:2013-04-14 06:12:12

标签: c# powershell pipeline

我正在尝试将c#app中的字符串传递给我的powershell脚本。

我一直在发错:“找不到接受参数'$null'的位置参数 我该怎么办?

我的c#代码:

  public void PowerShell()
    {
        RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
        Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
        runspace.Open();
        RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);

        Pipeline pipeline = runspace.CreatePipeline();

        String scriptfile = @"c:\test.ps1";

        Command myCommand = new Command(scriptfile, false);

        CommandParameter testParam = new CommandParameter("username", "serverName");

        myCommand.Parameters.Add(testParam);


        pipeline.Commands.Add(myCommand);
        Collection<PSObject> psObjects;
        psObjects = pipeline.Invoke(); <---error- "A positional parameter cannot be found that accepts argument '$null'" 
        runspace.Close();

    }

我的powershell代码:

 Out-Host  $username

1 个答案:

答案 0 :(得分:0)

你的PS脚本没有参数,它只是使用变量。所以,试试这个:

Param($username)
Write-Output $username

请注意,Out-Host在你的情况下是不可接受的,因为它试图将param输出到调用范围,而不是简单地将一些内容写入输出流。

此外,您可以在运行空间中设置变量,因此它将在没有参数的脚本中可用:

runspace.SessionStateProxy.SetVariable("username", "SomeUser");

(必须在runspace.Open()之后和pipeline.Invoke()之前完成