2

私は C# で Office 365 プラグインに取り組んでおり、次の PowerShell コマンドを試しています。

$newLicense = New-MsolLicenseOptions -AccountSkuId example:ENTERPRISEPACK -DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE
Set-MsolUserLicense -UserPrincipalName test@example.com -AddLicenses "example:ENTERPRISEPACK" -LicenseOptions $newLicense

PSでは、これはうまく機能します。C# では、このコマンドを実行できません。PowerShellInvokerクラスからの私の C# コードは次のとおりです。

var iss = InitialSessionState.CreateDefault();
iss.ImportPSModule(new[] { MsOnline });
iss.ThrowOnRunspaceOpenError = true;
_runspace = RunspaceFactory.CreateRunspace(iss);
_runspace.Open();
_invoker = new RunspaceInvoke(_runspace);

私は多くの方法を試しました:

scriptText_ = "$newLicense = New-MsolLicenseOptions -AccountSkuId {1} -DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE\n"+
"Set-MsolUserLicense -UserPrincipalName test@example.com -AddLicenses \"example:ENTERPRISEPACK\" -LicenseOptions $newLicense");

この次の方法を使用して、完全に機能する他のコマンドを実行します。

_invoker.Invoke(scriptText_);

また:

var pipeline = _runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText_);
return pipeline.Invoke(); // and getting back the variable

また、Runspace オブジェクトに変数を追加しようとしました。

_runspace.SessionStateProxy.SetVariable ("newLicense", pipeline.Invoke());

ただし、コマンドは機能せず、エラーは返されません。PowerShell 環境がよくわかりません (初心者です)。

ご協力いただきありがとうございます。

4

1 に答える 1

4

PowerShell エンジンが表示しないというエラーが発生していると思われます。終了しないエラーを観察するには、代わりにこのアプローチを試してください。

var ps = PowerShell.Create();
ps.AddScript(@"Get-ChildItem c:\xyzzy");
var results = ps.Invoke();
if (ps.HadErrors)
{
    foreach (var errorRecord in ps.Streams.Error)
    {
        Console.WriteLine(errorRecord);
    }
}
foreach (var result in results)
{
    Console.WriteLine(result);
}
于 2013-01-21T19:32:08.990 に答える