我需要在C#中执行PowerShell脚本 . 该脚本需要命令行参数 .
这是我到目前为止所做的:
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(scriptFile);
// Execute PowerShell script
results = pipeline.Invoke();
scriptFile包含类似“C:\ Program Files \ MyProgram \ Whatever.ps1”的内容 .
该脚本使用命令行参数,例如“-key Value”,而Value可以是类似于也可能包含空格的路径 .
我没有这个工作 . 有谁知道如何从C#中将命令行参数传递给PowerShell脚本并确保空格没有问题?
7 回答
尝试将scriptfile创建为单独的命令:
然后你可以添加参数
最后
Here is the complete, edited code:
我有另一个解决方案 . 我只想测试执行PowerShell脚本是否成功,因为可能有人可能会更改策略 . 作为参数,我只是指定要执行的脚本的路径 .
脚本的内容是:
有没有机会我可以更清楚地了解Commands.AddScript方法的传递参数?
C:\ Foo1.PS1 Hello World Hunger C:\ Foo2.PS1 Hello World
scriptFile =“C:\ Foo1.PS1”
parameters =“parm1 parm2 parm3”...可变长度的参数
解决了这个问题......将null作为名称,将param作为值传递给CommandParameters集合
这是我的功能:
您也可以使用AddScript方法使用管道:
它将采用一个字符串,以及您传递的任何参数 .
如果您使用,这是一种向脚本添加参数的方法
这是使用HashMap作为参数,键是脚本中变量的名称,值是变量的值 .
而fill变量方法是:
这样,您可以轻松地向脚本添加多个参数 . 我还注意到,如果你想从脚本中的变量中获取值,如下所示:
//结果是v的名称
你必须按照我展示的方式去做,因为出于某种原因,如果你这样做,Kosi2801建议脚本变量列表不会填充你自己的变量 .
我的更小更简单:
对我来说,从C#运行PowerShell脚本最灵活的方法是使用PowerShell.Create() . AddScript()
代码的片段是
您可以通过检查Streams.Error来检查是否有任何错误 . 检查收藏真的很方便 . 用户是PowerShell脚本返回的对象类型 .