1

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();

すべてのコマンドを個別のコマンドとして追加するか、スクリプトをファイルに保存して実行のために読み込むことで、すべてのコマンドを実行するにはどうすればよいですか? ベストプラクティスは何ですか?

4

1 に答える 1

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/");

MSDN の Runspace Samplesもご覧ください。

--- フェルダ

于 2012-04-06T07:19:29.530 に答える