从包含C#的变量执行多个Powershell命令

时间:2012-04-06 03:10:31

标签: c# sharepoint powershell sharepoint-2010

我有一个我想从C#运行的powershell脚本。脚本的内容是:

$w = Get-SPWebApplication "http://mysite/"
$w.UseClaimsAuthentication = 1
$w.Update()
$w.ProvisionGlobally()
$w.MigrateUsers($True) 

用于将网站设置为基于声明的身份验证。我知道如何从C#执行多个命令但是我不知道如何在考虑变量$ w的情况下运行整个脚本。

PowerShell OPowerShell = null;
Runspace OSPRunSpace = null;
RunspaceConfiguration OSPRSConfiguration = RunspaceConfiguration.Create();
PSSnapInException OExSnapIn = null;
//Add a snap in for SharePoint. This will include all the power shell commands for SharePoint
PSSnapInInfo OSnapInInfo = OSPRSConfiguration.AddPSSnapIn("Microsoft.SharePoint.PowerShell", out OExSnapIn);
OSPRunSpace = RunspaceFactory.CreateRunspace(OSPRSConfiguration);
OPowerShell = PowerShell.Create();
OPowerShell.Runspace = OSPRunSpace;
Command Cmd1 = new Command("Get-SPWebApplication");
Cmd1.Parameters.Add("http://mysite/");
OPowerShell.Commands.AddCommand(Cmd1);
// Another command
// Another command
OSPRunSpace.Open();
OPowerShell.Invoke();
OSPRunSpace.Close();

如何通过将它们作为单独的命令添加或将脚本保存到文件并将其读入以执行来执行所有命令?什么是最佳做法?

1 个答案:

答案 0 :(得分:3)

您可以使用AddScript方法添加包含脚本的字符串:

OPowerShell.Commands.AddScript("@
 $w = Get-SPWebApplication ""http://mysite/""
 $w.UseClaimsAuthentication = 1
 $w.Update()
 $w.ProvisionGlobally()
 $w.MigrateUsers($True)
");

您可以在调用之前向管道添加多个脚本摘录。您还可以将参数传递给脚本,例如:

OPowerShell.Commands.AddScript("@
 $w = Get-SPWebApplication $args[0]
 ...
");
OPowerShell.Commands.AddParameter(null, "http://mysite/");

您还可以查看Runspace Samples on MSDN

---费达