作为服务运行时找不到PowerShell模块

时间:2013-02-26 14:19:26

标签: .net powershell service office365

我有一个项目,我将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();
}

P.S。:该服务正在“本地系统”帐户下运行。

1 个答案:

答案 0 :(得分:2)

您的服务是以32位还是64位目标运行。在多种情况下我遇到了32/64问题。