繁体   English   中英

如何在 C# 代码中正确使用 PowerShell 模块

[英]How to properly use a PowerShell Module in C# Code

我最近用 C# 编写了一个库,它使用 System.Management.Automation 来执行一些 PowerShell 命令。 更具体地说,它使用 MSOnline 模块调用 cmdlet 来提供 Office 365 许可证。

(MSOnline 模块安装在我的机器上,因此未在代码中导入)

项目设置:

不允许嵌入图片

代码:

ProvisionHandler.cs @ WorkWithO365

private PowerShell connectToO365(string adminprincipal, string password)
    {
        //Admin Credentials
        PSCredential credential = new PSCredential(adminprincipal, convertToSecureString(password));

        //open Shell
        var ps = PowerShell.Create();

        //Admin-Login
        ps.AddCommand("Connect-MsolService").AddParameter("-Credential", credential);
        ps.Invoke();//Error here

        return ps;
    }

(实际上还有更多功能,但这不是我的观点)

然后我写了一个控制台应用程序,它引用了那个库:

Programm.cs @ PowerConsole

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WorkWithO365;

namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            var tenant = "myO365tenant.com";

            var adminpric = "admin.login@" + tenant;
            var adminpw = "somePassword";

            var usrPre = "Console";
            var usrG = "Test";


            ProvisionHandler pro = new ProvisionHandler();
            pro.provision(tenant, adminpric, adminpw, usrPre, usrG);
        }
    }
}

结果:一切正常。

只是为了玩,我在解决方案中添加了第二个控制台应用程序。 第二个控制台具有与 PowerConsole 完全相同的代码,并且还引用了相同的库。 但突然间我得到了这个令人困惑的错误:

System.Management.Automation.CommandNotFoundException :在模块“MSOnline”中找到“Connect-MsolService”命令,但无法加载该模块。 有关详细信息,请运行“导入模块 MSOnline”。

内部异常 1: BadImageFormatException :无法加载文件或程序集“file:///C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\MSOnline\\Microsoft.Online.Administration.Automation.PSModule.dll”或其中之一它的依赖。 试图加载格式不正确的程序。

内部异常 2: CmdletInvocationException :无法加载文件或程序集“file:///C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\MSOnline\\Microsoft.Online.Administration.Automation.PSModule.dll”或其中之一它的依赖。 试图加载格式不正确的程序。

我发现有人有几乎相同的问题,有以下解决方案:

这是项目文件本身的问题。 创建一个新的(并再次复制所有内容)工作得很好,这也意味着我的 MSOnline 模块已正确安装并按预期工作。

但这对我不起作用 我也不明白 PowerConsole 是如何工作的,而 Test1(完全相同的代码)则不然。 我需要解决这个问题,因为我的目标是在 WCF 服务中使用 WorkWithO365 库,该库托管在 azure 中。

我在这里做错了什么? 可能有另一种方法将 MSOnline 模块导入到 Visual Studio 项目中,以避免在“C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\MSOnline\\”中查找

所有功劳都归功于BDarley

将平台目标设置为 x64 后,我能够让我的 C# PowerShell 代码工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM