在C#中调用powershell脚本,需要引用的namespace如下:
using System.Management.Automation;
using System.Management.Automation.Runspaces;
添加System.Management.Automation.dll的引用,需要使用浏览,如果不知道位置,可以先在本机查找下。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 11 //RunPowershell(@".\x.ps1", ""); 2 private Collection<PSObject> RunPowershell(string filePath, string parameters)
2 3 {
3 4 RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
4 5 Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
5 6 runspace.Open();
6 7 RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
7 8 Pipeline pipeline = runspace.CreatePipeline();
8 9 Command scriptCommand = new Command(filePath);
910 Collection<CommandParameter> commandParameters = new Collection<CommandParameter>();
1011 12 string[] tempParas = parameters.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
1113 for (int i = 0; i < tempParas.Length; i += 2)
1214 {
1315 CommandParameter commandParm = new CommandParameter(tempParas[i], tempParas[i + 1]);
1416 commandParameters.Add(commandParm);
1517 scriptCommand.Parameters.Add(commandParm);
1618 }
1719 20 pipeline.Commands.Add(scriptCommand);
1821 Collection<PSObject> psObjects;
1922 psObjects = pipeline.Invoke();
2023 24 if (pipeline.Error.Count > 0)
2125 {
2226 throw new Exception("脚本执行失败");
2327 }
2428 29 runspace.Close();
2530 31 return psObjects;
2632 }
27
powershell脚本执行的结果存在Collection<PSObject>集合中。