0

我正在尝试将字符串从我的 c# 应用程序传递到我的 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
4

1 回答 1

0

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

Param($username)
Write-Output $username

请注意,在您的情况下 Out-Host 是不可接受的,因为它会尝试将参数输出到调用范围,而不是简单地向输出流写入内容。

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

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

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

于 2013-04-14T06:36:40.517 回答