3

Office 365 ライセンスをユーザーに割り当てるプロジェクトがあります。管理者が使用可能なライセンスを表示し、ユーザーのライセンスを選択できる Web プロジェクトがあります。バックグラウンドでは、15 分ごとに実際のライセンス割り当て (およびその他の多くのタスク) を実行するサービスがあります。ライセンスを直接割り当てない理由は、ユーザーがまだ Office 365 に同期されていない可能性があるためです。DirSync がまだ実行されていない場合、サービスは後で自動的に再試行します。

私の問題に戻る: Office 365 への接続は、PowerShell モジュール "MSOnline" を使用しています。問題は、このモジュールをサービスがロードできないことです。私はいつも標準的なエラーメッセージを受け取ります:

どのモジュール ディレクトリにも有効なモジュール ファイルが見つからなかったため、指定されたモジュール 'MSOnline' は読み込まれませんでした。

Web アプリケーションにはこの問題はありません。たとえば、接続して利用可能なライセンスを取得できます。サービス アプリケーションのコードを LINQPad または小さなスタンドアロン実行可能ファイルとして使用すると、すべて正常に動作します。サービスのみがモジュールをロードできません。誰でも私を助けることができますか?

次のコード スニペットは、Web アプリケーションとサービスの両方で Office 365 に接続するために使用されます (コードは読みやすくするために簡略化されています)。

var iss = InitialSessionState.CreateDefault();

iss.ThrowOnRunspaceOpenError = true;
iss.AuthorizationManager = new AuthorizationManager("MyPowerShellInvoker");

iss.ImportPSModule("MSOnline");

_runspace = RunspaceFactory.CreateRunspace(iss);
_runspace.Open();
_invoker = new RunspaceInvoke(_runspace);

using (Pipeline pipeline = _runspace.CreatePipeline())
{
    var cmd = new Command("Connect-MsolService");
    cmd.Parameters.Add("Credential", /* PSCredential object */);

    pipeline.Commands.Add(cmd);
    pipeline.Invoke();
}

PS:サービスは「ローカル システム」アカウントで実行されています。

4

1 に答える 1

2

サービスは 32 ビットまたは 64 ビットのターゲットとして実行されていますか。複数のケースで 32/64 問題に遭遇しました。

于 2013-02-27T15:03:16.267 に答える