3

PowerShell を使用して Office 365 に接続し、ユーザー ライセンスに関する詳細を取得する ASP.NET MVC 3 アプリケーションがあります。

コード自体は多くの場合に機能します。

  • 私のローカルIISのプロジェクトは動作します
  • ライブラリを使用した LINQPad のコードが私のマシンで動作する
  • ライブラリを使用した LINQPad のコードがターゲット サーバーで動作する

もちろん、機能しない場所は、実際に機能する唯一の場所です。ターゲット サーバー上の IIS です。

Connect-MsolServiceコマンドレットを呼び出すと、常に例外が発生します。問題は、例外が何も教えてくれないことです。

例外の種類は

Microsoft.Online.Administration.Automation.MicrosoftOnlineException

メッセージは

タイプ 'Microsoft.Online.Administration.Automation.MicrosoftOnlineException' の例外がスローされました

これはかなり役に立ちません。

コードで使用する Office 365 ユーザー アカウントは常に同じです。IIS の起動に使用されるユーザー アカウントも常に同じです (ローカル システム)。

PowerShell コードの実行を という名前のクラスにラップしましたPowerShellInvoker。そのコードはここにあります。

Office 365 に接続するコードは次のとおりです。

var cred = new PSCredential(upn, password);

_psi = new PowerShellInvoker("MSOnline");
_psi.ExecuteCommand("Connect-MsolService", new { Credential = cred });

実際にスローErrorされた例外はなく、パイプラインのプロパティでエラーが見つかりました。(クラスの 50 以降の行を参照してくださいPowerShellInvoker。)

問題は、特に LINQPad を使用するときに同じコードが機能するため、何が問題なのかわからないことです。Google による検索結果も役に立ちませんでした。

サーバーは、IIS 7.5 を搭載した Windows Server 2008 R2 Datacenter SP1 で実行されます。

4

1 に答える 1

8

解決策を見つけました!

理由はわかりませんが、ターゲット サーバーでは、アプリのアプリ プールの詳細設定で[ユーザー プロファイルの読み込み]が に設定されていましたFalse。私はそれをTrue(デフォルトでなければならない)に戻して、ほら、それは動作します!

編集: IIS 6.0マネージャーがインストールされ、IIS 6.0まではデフォルトの動作だったため、ユーザープロファイルの設定はデフォルトで自動的に設定さFalseFalse

于 2012-08-21T14:43:13.753 に答える