繁体   English   中英

如何通过C#程序将参数传递给Powershell脚本?

[英]How to pass arguments to a powershell script from C# program?

我有一个脚本文件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。 那怎么可能?

我宁愿使用Commands.Add方法添加一个将直接调用Sample.ps1脚本的Commands.Add 作为文件,而不是读取文件并使用Commands.AddScript将其内容作为文本注入。

pipeline.Commands.Add( "C:\\dirWithNoSpaces\\scripts\\Sample.ps1 -param1 value1");

但请注意转义。.我刚刚读到,如果路径中有空格,则必须用引号引起来:

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

但是,如果要保持现在的状态,则可能会寻找一些在Pipeline或Runspace对象中添加“参数”的方法。 例如,我刚刚发现: Runspace.InitialSessionState-您向运行时环境注入了一些初始变量,因此您可以使用它将值传递给内联脚本。 但是,这些值将已经是变量,而不是在ARGV中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM