3

我有一个 ASP.NET MVC 3 应用程序,它使用 PowerShell 连接到 Office 365 以检索有关用户许可证的一些详细信息。

代码本身在许多情况下都有效:

  • 我本地 IIS 中的项目有效
  • 使用该库的 LINQPad 中的一段代码在我的机器上工作
  • 使用该库的 LINQPad 中的一段代码在目标服务器上工作

它不工作的地方当然是它真正应该工作的唯一地方:目标服务器上的 IIS。

Connect-MsolService调用cmdlet时,我总是遇到异常。问题是异常并没有告诉我任何事情。

异常类型是

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 时相同的代码可以工作。谷歌的搜索结果也帮不了我。

该服务器在带有 IIS 7.5 的 Windows Server 2008 R2 Datacenter SP1 上运行。

4

1 回答 1

8

我找到了解决方案!

我不知道原因,但在目标服务器上,我的应用程序的应用程序池的高级设置已将Load User Profile设置为False. 我把它改回True(这应该是默认的)并且瞧,它有效!

编辑:加载用户配置文件设置显然False是默认自动设置的,因为安装了 IIS 6.0 管理器并且False是 IIS 6.0 之前的默认行为。

于 2012-08-21T14:43:13.753 回答