2015-02-18 2 views
0

Я пытаюсь выполнить несколько очень простых командлетов PowerShell/ActiveDirectory, удаленно, но я не могу загрузить модуль ActiveDirectory. Я пробовал пару разных вещей, включая регистрацию удаленной оболочки на удаленном сервере, который загружает модуль, но я не могу заставить это работать.C# Не удается загрузить модуль ActiveDirectory для Powershell Remote Use

Что работает: Удаленная настройка работает. Мой код C# может подключаться к удаленному компьютеру и выполнять команды Exchange, например New-Mailbox. Однако я не могу выполнять команды, такие как Add-ADGroupMember.

Если я вхожу в систему на удаленном компьютере, я могу проверить, что все доступные CMD-ключи Powershell доступны для как Exchange, так и AD. Поэтому я знаю, что они работают на удаленной машине, если я просто вхожу в систему для Powershell.

Попытка выполнить Add-ADGroupMember дает мне ошибку, что он не распознан как командлет. Это указывает на то, что модуль ActiveDirectory не загружен. Однако, если я пытаюсь импортировать, например, так:

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

эта команда завершается с ошибкой, что термин «Import-Module» также не является признанным Командлет.

Я также попытался подключиться к shellURI, который специально загружает модуль ActiveDirectory, но он не может подключиться. Я получаю сообщение об ошибке, что URI ресурса не найден в каталоге WS-Management.

Это также вызывает еще одну странную вещь; Я не понимаю, почему я не могу подключиться к URI ресурсов, которые перечислены в удаленном Powershell. Если я делаю 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

Помогите

ответ

0

Все они указывают на то, что удаленная оболочка ограничена режимом NoLanguage. Это нормально для удаленных сеансов Exchange. Единственное, что вы можете выполнить на этом сеансе, - это командлеты Exchange. Никаких других командлетов или даже базовых элементов языка не доступно (вы даже не можете создать переменную).

Shay Levy написал статью, описывающую вас, чтобы повторно настроить эти сеансы для режима Full Language, чтобы обойти эти ограничения.

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

Смежные вопросы