第一步:引用“System.Management.Automation.dll”
这个动态库可以从自己电脑上搜索到,但是本人在做测试的时候发现换个机器会报错,最后还是用的从window server 2008上面搜索的
第二步:封装运行脚本
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Text;
using System.Threading.Tasks;
namespace SetUp
{
/// <summary>
/// PowerShell脚本基础
/// </summary>
public static class PowerShell
{
/// <summary>
/// 运行脚本信息,返回脚本输出
/// </summary>
/// <param name="scriptText">需要运行的脚本</param>
/// <returns>output of the script</returns>
public static string RunScript(List<string> scripts, List<PSParam> pars)
{
Runspace runspace = null;
Pipeline pipeline = null;
runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript("Set-ExecutionPolicy RemoteSigned");
//pipeline.Commands.AddScript("Set-ExecutionPolicy Unrestricted");
//pipeline.Commands.AddScript("Set-ExecutionPolicy -ExecutionPolicy Unrestricted");
foreach (var scr in scripts)
{
pipeline.Commands.AddScript(scr);
}
//注入参数
if (pars != null)
{
foreach (var par in pars)
{
runspace.SessionStateProxy.SetVariable(par.Key, par.Value);
}
}
//返回结果
var results = pipeline.Invoke();
runspace.Close();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
var Success = obj.Properties["Success"];
if (Success != null)
{
stringBuilder.AppendLine(Success.Value.ToString());
}
else
{
stringBuilder.AppendLine(obj.ToString());
}
}
return stringBuilder.ToString();
}
}
/// <summary>
/// 脚本参数
/// </summary>
public class PSParam
{
public string Key
{
get;
set;
}
public object Value
{
get;
set;
}
}
}