2012-04-06 62 views
1

我有一个PowerShell脚本,我想从C#运行。脚本的内容是:从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(); 

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

回答

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

--- Ferda