我最近在C#中编写了一个库,它使用System.Management.Automation来执行一些PowerShell命令。 更具体地说,它调用带有MSOnline模块的cmdlet来配置Office 365许可证。
(MSOnline Module已安装在我的机器上,因此未在代码中导入)
项目-设置:
代码:
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 :'The 在“MSOnline”模块中找到了“Connect-MsolService”命令,但是 无法加载模块。有关更多信息,请运行 '导入模块MSOnline'。'
内部异常1: BadImageFormatException :无法加载文件或 部件 '文件:/// C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \模块\ MSOnline \ Microsoft.Online.Administration.Automation.PSModule.dll' 或其中一个依赖项。尝试加载程序 格式不正确。
内部异常2: CmdletInvocationException :无法加载文件或 部件 '文件:/// C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \模块\ MSOnline \ Microsoft.Online.Administration.Automation.PSModule.dll' 或其中一个依赖项。尝试加载程序 格式不正确。
我发现有nearly the same problem的人有以下解决方案:
这是项目文件本身的问题。创建一个新的(和 把所有东西都重新复制回去了)做了一个享受,这也意味着我的 MSOnline模块已正确安装并按预期工作。
但这对我不起作用。另外我不明白,PowerConsole如何工作,而Test1(完全相同的代码)则不然。我需要解决这个问题,因为我的目标是在一个托管在azure中的WCF服务中使用WorkWithO365库。
我在这里做错了什么?可能有另一种方法将MSOnline模块导入 Visual Studio项目,以避免在“C:\ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ MSOnline \”< /强>