Запустите командлеты оболочки управления Exchange от Visual Basic / C # /. Net App приложение

StackOverflow https://stackoverflow.com/questions/2641543

  •  27-09-2019
  •  | 
  •  

Вопрос

Цель: предоставить веб-службу, используя Visual Basic или C # или .NET, который взаимодействует с оболочкой управления Exchange, отправляя его команды для запуска командлетов и возвращает результаты в виде XML. (Обратите внимание, что мы могли бы использовать любую ланагую, чтобы написать службу, но поскольку это окна Windows, и у нас есть Visual Studio 2008, казалось, что простое решение будет просто использовать его для создания веб-сервиса VB / .NET. Действительно, это Было довольно легко сделать это, просто указать и нажмите.)

Проблема: как запустить командлет Shell Management Exchange из веб-сервиса, например, Get-PrivateGroupMember «Live президенты»

Похоже, что мы должны иметь возможность создать скрипт PowerShell, который запускает командлет, и сможет вызвать это из командной строки, и, таким образом, просто вызовите ее в рамках программы. Это звучит правильно? Если так, как бы я пошел об этом? Спасибо. Ответ может быть языком agnostic, но Visual Basic, вероятно, будет лучше всего, поскольку это то, что я загрузил тестовую веб-службу.

Это было полезно?

Решение 2

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

Краткий ответ заключается в том, что вы создаете новое приложение PowerShell в Visual Studio, то вы добавляете ссылку на систему. Phange.Automation DLL. Это позволяет вам настроить пространство имен для PowerShell и сделать его звонкам. http://msdn.microsoft.com/en-us/library/system.management.automation(vs.85).aspx. Вы создаете трубопровод, используя доступный класс трубопровода http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.Pipeline(vs.85).aspx. Для того, чтобы трусить ваши команды обратно. Затем вы поместите свои команды, добавляете параметры при необходимости. Запустите приложение, и он вернет результаты из командлетов, которые вы вызвали в PowerShell, и вы можете отправиться оттуда.

Другие советы

Фактический код, адаптированный из MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx. Может быть сложно, потому что вы должны получить разрешения прямо и запустить его на Macine со всеми плагинами Exchange:

using Microsoft.Win32;
using System.Collections.ObjectModel;
using System.IO;
using System.Management.Automation.Runspaces;
using System.Reflection;

    public static Runspace GetExchangeRunspace()
    {
        return GetExchangeRunspace("");
    }
    public static Runspace GetExchangeRunspace(string snapIn)
    {
        string consoleFilePath = (ScriptEngine.GetExchangeAssemblyPath() 
            + "bin\\exshell.psc1").Replace("Exchange Server", "EXCHAN~1");
        Response.Write("<br/>" + consoleFilePath);
        PSConsoleLoadException warnings = null;
        RunspaceConfiguration runspaceConfiguration 
            = RunspaceConfiguration.Create(consoleFilePath, out warnings);
        if ((snapIn + "").Trim().Length > 0)
        {
            PSSnapInException warning = null;
            Response.Write("<br/>Start AddPSSnapIn..." + snapIn);
            Response.Write("<br/>" 
                + runspaceConfiguration.AddPSSnapIn(snapIn, out warning));
            Response.Write("<br/>" + warning);
        }
        return RunspaceFactory.CreateRunspace(runspaceConfiguration);
    }

    private static string GetExchangeAssemblyPath()
    {
        string path = "";
        try
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey(
                "SOFTWARE\\Microsoft\\ExchangeServer\\v14\\Setup"); // or your version
            if (key != null)
            {
                path = Path.GetFullPath(string.Concat(key.GetValue("MsiInstallPath")));
                Response.Write(path);
            }
        }
        catch (Exception ex) { }
        return path;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top