我正在尝试远程执行一些非常简单的Powershell / ActiveDirectory cmdlts,但我无法加载ActiveDirectory模块。我尝试过几个不同的东西,包括在加载模块的远程服务器上注册一个远程shell,但我也无法做到这一点。
什么有效:远程设置有效。我的C#代码可以连接到远程计算机并执行Exchange命令,例如 New-Mailbox 。但是,我无法执行 Add-ADGroupMember 之类的命令。
如果我登录到远程计算机,我可以验证所有Powershell cmdlts是否可用, Exchange和AD 。所以我知道如果我刚刚登陆Powershell,他们就可以在远程机器上工作了。
尝试执行 Add-ADGroupMember 会给我一个错误,即它无法识别为cmdlet。这表明,我没有加载ActiveDirectory模块。但是,如果我尝试导入它,就像这样:
ps.Commands.AddCommand("Import-Module").AddArgument("ActiveDirectory");
此命令失败,并显示“Import-Module”一词也不是可识别的cmdlet。
我还尝试连接到专门加载ActiveDirectory模块的shellURI,但它无法连接。我收到一个错误,即在WS-Management目录中找不到资源URI。
这也带来了另一件奇怪的事情;我不明白为什么我无法连接到远程Powershell中列出的资源URI。如果我执行PS_GetSessionConfiguration,我会看到以下内容:
ADExchange(我自己的定制) Microsoft.Powershell Microsoft.Powershell.Workflow Microsoft.Powershell32 Microsoft.ServerManager
但是,我无法连接到其中任何一个。当我设置我的连接信息对象时,我必须使用以下URI:
string shell = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";
所有其他URI都失败了。那是为什么?
无论如何,这里有一些代码:
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-Mailbox”。如果我注释掉其他命令,这将单独工作。
其他命令都做了一些变化:
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 Powershell命令 2)我无法远程加载ActiveDirectory模块 3)我无法连接到不同的Powershell shell配置
请帮忙
答案 0 :(得分:0)
所有症状都指向远程shell被限制为NoLanguage模式。这对于Exchange远程会话来说是正常的。您在该会话中唯一可以执行的是Exchange cmdlet。没有其他cmdlet甚至基本语言元素可用(您甚至无法创建变量)。
Shay Levy撰写了一篇文章,描述您为完全语言模式重新配置这些会话以解决这些限制。
get-full-control-over-your-exchange-remote-powershell-session