我有一个 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 上运行。