C # Exchange PowerShell pipeLine Invoke вызывает CmdletInvocationException для нулевых значений параметров - PullRequest
2 голосов
/ 07 декабря 2011

Я пытаюсь получить простой вывод команды PowerShell в C # с использованием функциональности, найденной в пространстве имен System.Management.Automation.

У меня на компьютере есть консоль Exchange, и я могу успешно выдавать команды из консоли, но из C # я получаю ошибку, которую не понимаю.

Вот пример кода, который должен получить простую информацию о сервере:

static void Main(string[] args)
{
    RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
    PSSnapInException snapInException = null;
    PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException);

    using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig))
    {
        myRunSpace.Open();

        using (Pipeline pipeLine = myRunSpace.CreatePipeline())
        {
            Command serverCommand = new Command("Get-MailboxServer");

            pipeLine.Commands.Add(serverCommand);
            Collection<PSObject> server = pipeLine.Invoke();
            foreach (PSObject cmdlet in server)
            {
                string cmdletName = cmdlet.Properties["Name"].Value.ToString();
                Console.WriteLine(cmdletName);
            }
        }
    }
}

Фактическая ошибка возникает в строке pipeLine.Invoke ():

Исключение System.Management.Automation.CmdletInvocationException было обработано
Значение не может быть нулевым.
Имя параметра: параметры
Источник = System.Management.Automation

Я попытался добавить параметры, например, идентификатор сервера, но происходит то же самое:

using (Pipeline pipeLine = myRunSpace.CreatePipeline())
{
    Command serverCommand = new Command("Get-MailboxServer");
    serverCommand.Parameters.Add("Identity", mbServerName);
    pipeLine.Commands.Add(serverCommand);
    Collection<PSObject> server = pipeLine.Invoke();
}

Ответы [ 2 ]

2 голосов
/ 03 февраля 2014

добавьте эти строки в файл app.config

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>
0 голосов
/ 07 декабря 2011

Я заменил команду на Get-Process, и она отлично работает.Похоже, проблема заключается в том, как работают командлеты exchange (хотя Get-Mailboxserver также имеет вариант, который не принимает никаких параметров.)

Этот поток говорит о проблеме и предлагает альтернативное решение:http://social.technet.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/48da1346-f47e-4ba9-9747-428fe07b4492/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...