Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#程序向powershell脚本传递参数?_C#_Powershell_Parameter Passing - Fatal编程技术网

如何从C#程序向powershell脚本传递参数?

如何从C#程序向powershell脚本传递参数?,c#,powershell,parameter-passing,C#,Powershell,Parameter Passing,我有一个脚本文件sample.ps1,其中包含以下命令: copy-item C:\source -destination C:\destination. 我希望将其作为参数传递给脚本,而不是硬编码源和目标的值 copy-item $source -destination $destination. 我想从独立客户机调用此脚本,并将源和目标作为参数传递。 我有以下程序来执行脚本文件: string shellUri = "http://schemas.microsof

我有一个脚本文件sample.ps1,其中包含以下命令:

copy-item C:\source -destination C:\destination.
我希望将其作为参数传递给脚本,而不是硬编码源和目标的值

copy-item $source -destination $destination.
我想从独立客户机调用此脚本,并将源和目标作为参数传递。 我有以下程序来执行脚本文件:

            string shellUri = "http://schemas.microsoft.com/powershell/Microsoft.PowerShell";
            string userName = "MachineName\\Administrator";
            string password = "Password";
            SecureString securePassword = new SecureString();

            foreach (char c in password)
            {
                securePassword.AppendChar(c);
            }
            PSCredential credential = new PSCredential(userName, securePassword);
            WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "machinename", 5985, "/wsman", shellUri, credential);
            using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
            {

                runspace.Open();
        String file = "C:\\scripts\\Sample.ps1";
                Pipeline pipeline = runspace.CreatePipeline();

                pipeline.Commands.AddScript(System.IO.File.ReadAllText(file));
        }

我想通过C#程序将参数传递给脚本Sample.ps1。这是怎么可能的?

与其读取文件并使用
命令,不如使用
命令。AddScript
将其内容作为文本注入,我宁愿使用
命令。Add
方法添加一个命令,该命令将作为文件直接调用Sample.ps1脚本:

pipeline.Commands.Add( "C:\\dirWithNoSpaces\\scripts\\Sample.ps1 -param1 value1");
但是要小心逃跑。。我刚刚读到,如果路径中有空格,则必须引用:

pipeline.Commands.Add( "&\"C:\\dir with spaces\\scripts\\Sample.ps1\" -param1 value1");

但是,如果您想保持现有状态,可以寻找一些方法在管道或运行空间对象中添加“参数”。例如,我刚刚发现:-您将一些初始变量注入运行时环境,以便可以使用它将值传递给内联脚本。但是,这些值已经在变量中,而不是在ARGV或类似的变量中。

以下是您的问题答案:


仅供参考:我没有试过。我是基于。它应该可以工作,但我只是猜测。我尝试了上面没有参数的方法,但我得到了以下错误:“未处理的异常:System.Management.Automation.RemoteException:术语“C:\scripts\Sample.ps1”不能识别为cmdlet、函数、scrip文件或可操作程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。”