Выполнение команды powershell в C # с ошибками: «Невозможно вызвать эту функцию, потому что текущий хост не реализует ее» - PullRequest
4 голосов
/ 18 ноября 2010

У меня есть приложение, которое я использую для запуска команд Exchange Powershell внутри кода C #, как показано ниже. Это пример соответствующих строк, которые я использую для запуска команды powershell.

            RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
        PSSnapInException snapInException = null;

        //load Exchange shell
        rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException); 
        Runspace runSpace = RunspaceFactory.CreateRunspace(rsConfig);

        //open runspace
        runSpace.Open();

        //setup pipeline
        Pipeline pipeLine = runSpace.CreatePipeline();
        String sScript = "get-mailbox -identity 'rj'";

        //add script to pipeline
        pipeLine.Commands.AddScript(sScript);

        //run the script
        pipeLine.Invoke();
        pipeLine.Dispose();

Этот код прекрасно работает во всех случаях до сих пор. сценарий, который я пытаюсь запустить вместо приведенного выше, заключается в установке RetentionPolicy для почтового ящика. Скрипт, который я пытаюсь запустить, выглядит следующим образом:

Set-Mailbox -Identity 'rj' -RetentionPolicy 'Основная политика хранения кампуса'

Когда я запускаю это в самом PowerShell, оно работает отлично, но когда я пытаюсь запустить его, используя приведенный ниже код, я получаю сообщение об ошибке: «Не удается вызвать эту функцию, поскольку текущий хост не реализует ее».

Из этой ошибки кажется, что команда, выполняемая в C #, не может запустить команду RetentionPolicy, но это не имеет особого смысла. Я гуглил это и попробовал все предложенное, но не повезло.

Если кто-нибудь знает, почему это происходит, это было бы очень полезно.

1 Ответ

11 голосов
/ 18 ноября 2010

Если эта команда обычно запрашивает подтверждение, вам потребуется:

  • Установить -Confirm:$false в качестве параметра (и, возможно, -Force)
  • Установить$ConfirmPreference = "None" перед вызовом Set-Mailbox (и, возможно, -Force тоже)
  • Создать хост и реализовать функцию подтверждения; -)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...