首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#无法加载用于Powershell远程使用的ActiveDirectory模块

C#无法加载用于Powershell远程使用的ActiveDirectory模块
EN

Stack Overflow用户
提问于 2015-02-18 00:50:21
回答 1查看 1.2K关注 0票数 0

我试图远程执行一些非常简单的Powershell/ActiveDirectory,但无法加载ActiveDirectory模块。我尝试了几种不同的方法,包括在加载模块的远程服务器上注册一个远程shell,但我也无法让它工作。

什么工作:远程设置工作。我的C#代码可以连接到远程机器并执行新邮箱之类的Exchange命令。但是,我不能执行像Add-ADGroupMember.这样的命令

如果我登录到远程计算机,我可以验证所有Powershell cmdlts都可用,用于Exchange和AD。所以我知道如果我登录Powershell,他们就能在远程机器上工作。

试图执行Add-ADGroupMember会给我一个错误,即它不能被识别为cmdlet。对我来说,这表明ActiveDirectory模块没有加载。但是,如果我试图导入它,如下所示:

代码语言:javascript
复制
ps.Commands.AddCommand("Import-Module").AddArgument("ActiveDirectory");

此命令失败,错误是术语“Import”也不是可识别的cmdlet。

我还尝试连接到一个专门加载shellURI模块的ActiveDirectory,但它无法连接。我收到一个错误,在WS-Management目录中找不到资源URI。

这也带来了另一件奇怪的事情;我不明白为什么不能连接到远程Powershell中列出的资源URI。如果我做了一个PS_GetSessionConfiguration,我会看到以下内容:

ADExchange (我自己的习惯) Microsoft.Powershell Microsoft.Powershell.Workflow Microsoft.Powershell32 Microsoft.ServerManager

然而,我不能连接到其中的任何一个。在设置连接信息对象时,必须使用以下URI:

代码语言:javascript
复制
string shell = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";

所有其他URI都失败了。为什么会这样呢?

总之,这里有一些代码:

代码语言:javascript
复制
using (Runspace runspace = RunspaceFactory.CreateRunspace(connInfo))
            {

                runspace.Open();

                using (PowerShell ps = PowerShell.Create())
                {
                    ps.Runspace = runspace;

                    Pipeline pipe = runspace.CreatePipeline();

                    ps.Commands.AddCommand("Import-Module").AddArgument("ActiveDirectory");
                    ps.Invoke();

                    ps.Commands.AddCommand(CreateNewUserCommand());
                    ps.Commands.AddCommand(CreateAddGroupCommand("FacnStaff"));
                    //ps.Commands.AddCommand(CreateAddGroupCommand("AllFacStaff"));
                    //ps.Commands.AddCommand(CreateAddGroupCommand("PasswordManagerFacStaff"));

                    results = ps.Invoke();
                }
            }

第一个命令CreateNewUserCommand执行“New”。如果我注释掉其他命令,这是孤立的。

其他命令都对此做了一些修改:

代码语言:javascript
复制
  private Command CreateAddGroupCommand(string group)
        {
            var command = new Command("Add-ADGroupMember");
            command.Parameters.Add("Identity", group);
            command.Parameters.Add("Members", _username);

            return command;
        }

所以我的问题是:

1)我无法远程运行AD命令;2)无法远程加载ActiveDirectory模块;3)无法连接到不同的Powershell配置

请帮帮忙

EN

回答 1

Stack Overflow用户

发布于 2015-02-18 01:34:38

所有这些症状都表明远程shell被限制在NoLanguage模式下。这对于Exchange远程会话来说是正常的。您可以在该会话中执行的唯一内容是Exchange。没有其他cmdlet甚至基本语言元素可用(您甚至不能创建一个变量)。

Shay写了一篇文章,描述了如何重新配置这些会话,使其成为完全语言模式,以绕过这些限制。

get-full-control-over-your-exchange-remote-powershell-session

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28574049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档