无法识别导入模块- c#的Powershell

本文关键字:Powershell 模块 识别 导入 | 更新日期: 2023-09-27 18:11:17

我正面临一个非常奇怪的局面。

我想用import - module命令导入ActiveDirectory模块。我做的第一件事是在我的服务器上安装模块(windows server 2012 R2)。一旦我完成了第一步,我试着用参数"ActiveDirectory"调用命令"Import-Module"。

下面是我使用的代码:

// Prepare the credentials that will be used when connecting
// to the server. More info on the user to use on the notes
// below this code snippet.
string runasUsername = @"MarioKart 8";
string runasPassword = "MarioKart";
SecureString ssRunasPassword = new SecureString();
foreach (char x in runasPassword)
    ssRunasPassword.AppendChar(x);
PSCredential credentials =
new PSCredential(runasUsername, ssRunasPassword);
// Prepare the connection
var connInfo = new WSManConnectionInfo(
   new Uri("MarioKart8Server"),
   "http://schemas.microsoft.com/powershell/Microsoft.Exchange",
   credentials);
connInfo.AuthenticationMechanism =
    AuthenticationMechanism.Basic;
connInfo.SkipCACheck = true;
connInfo.SkipCNCheck = true;
// Create the runspace where the command will be executed
var runspace = RunspaceFactory.CreateRunspace(connInfo);
// create the PowerShell command
var command = new Command("Import-Module");
command.Parameters.Add("Name","ActiveDirectory"); //I tried new string[] {"ActiveDirectory"} too.
// Add the command to the runspace's pipeline
runspace.Open();
var pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(command);
// Execute the command
var results = pipeline.Invoke();
if (results.Count > 0)
      System.Diagnostics.Debug.WriteLine("SUCCESS");
else
      System.Diagnostics.Debug.WriteLine("FAIL");

好,当我运行这个的时候,我有这个异常:

术语'Import-Module'不被识别为cmdlet、函数、脚本文件或可操作程序的名称。

请注意,我可以运行像"New-Mailbox"这样的基本命令而没有任何问题,所以问题实际上是"Import-Module"。

我真的不知道该怎么办,我做了很多研究,看起来有些人有同样的问题,但我没有找到任何文档解决方案。

请注意,当我直接在服务器的powershell上运行"Import-Module"时,一切正常!

我读到这可能是关于powershell版本的问题,我使用的版本是4.0(在服务器上)。

无法识别导入模块- c#的Powershell

我怀疑您正在使用Exchange远程管理会话。如果你是,那就是一个"无语言"约束会话。它将有Exchange cmdlet和一些通用的Powershell命令(如Get-Command)可用,但它没有Import-Module cmdlet。

IMHO,拥有这两组cmdlet的最简单方法是从通用PS会话开始,导入AD模块,然后连接到Exchange管理会话并执行import - pssession,并为Exchange管理内容使用隐式远程处理。如果这样做,就不局限于在Exchange服务器上运行它,也不需要安装Exchange管理工具。

编辑:Powershell的命令如下:
Import-Module ActiveDirectory
$EXSession = new-pssession -configurationname Microsoft.Exchange -ConnectionURI http://<Exchange server name>/powershell/ -authentication kerberos 
Import-PSSession $EXSession

并不是说您必须提供环境中要连接的Exchange服务器的名称。