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

标签 .net powershell service office365

我有一个项目,我在其中向用户分配 Office 365 许可。有一个 Web 项目允许管理员查看可用的许可证并为用户选择一个许可证。在后台,有一项服务每 15 分钟执行一次实际的许可证分配(以及许多其他任务)。我们不直接分配许可证的原因是用户可能尚未同步到 Office 365。如果 DirSync 尚未运行,该服务稍后会自动重试。

回到我的问题:与 Office 365 的连接正在使用 PowerShell 模块“MSOnline”。问题是这个模块不能被服务加载。我总是收到标准错误消息:

The specified module 'MSOnline' was not loaded because no valid module file was found in any module directory.

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();
}

附注:该服务在“本地系统”帐户下运行。

最佳答案

您的服务是以 32 位还是 64 位目标运行的。我在多个案例中遇到了 32/64 问题。

关于.net - 作为服务运行时找不到 PowerShell 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091392/

相关文章:

grails - grails服务::多个项目

asp.net - 为什么获取用户列表时获取角色的速度这么慢?

powershell - 在生产环境中使用 F# 脚本替换 powershell?

powershell - 如何在 PowerShell 中为脚本提供参数属性?

powershell - 如何在powershell中忽略foreach中的空值?

java - Spring 中的长期运行服务?

c# - 在 WCF 启动时运行函数

c# - 如何使用 LINQ 执行动态连接

.net - DLL (.Net) 中的 GUID

android - 使用网络服务发现时注册失败,错误代码为 0。