cmdlets del Shell de administración de Exchange de ejecución de Visual Basic / C # /. NET aplicación

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

  •  27-09-2019
  •  | 
  •  

Pregunta

Objetivo: Proporcionar un servicio web utilizando Visual Basic o C # .NET o que interactúa con el Shell de administración de Exchange, enviándolo comandos para ejecutar los cmdlets, y devolver los resultados como XML. (Nótese que se podría utilizar cualquier lanaguage para escribir el servicio, pero ya que es una caja de Windows y tenemos Visual Studio 2008, parecía que la solución más fácil sería sólo lo utilizan para crear un servicio web VB / .NET. De hecho, era bastante fácil de hacerlo, sólo apuntar y hacer clic.)

Problema: ¿Cómo ejecutar un cmdlet del Shell de administración de Exchange desde el servicio web, por ejemplo, Get-DistributionGroupMember "Presidentes en directo"

Parece que debemos ser capaces de crear un script de PowerShell que se ejecuta el cmdlet, y ser capaz de llamar a que a partir de la línea de comandos, por lo que acaba de llamar desde el programa. Hace este sonido correcto? Si es así ¿cómo iba a ir sobre esto? Gracias. Respuesta puede ser independiente del lenguaje, pero Visual Basic, probablemente sería mejor ya que es lo que he cargado el servicio web de prueba en.

¿Fue útil?

Solución 2

Bueno, no recibió una respuesta, pero algo se lo imaginó. Tuve un problema para conseguir una de 64 bits PowerShell para ejecutar, pero con el tiempo de actualizar a Exchange 2010 y usado C # y entonces ya no era un problema.

La respuesta corta es que se crea una nueva aplicación PowerShell en Visual Studio, a continuación, se agrega una referencia a la DLL System.Management.Automation. Esto le permite configurar un espacio de nombres para Powershell y hacer llamadas a la misma. http://msdn.microsoft.com /en-us/library/system.management.automation(VS.85).aspx Se crea un oleoducto utilizando la clase disponible Pipeline http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces .pipeline (VS.85) .aspx con el fin de tubo de los comandos de la espalda. Luego, coloque sus órdenes en, add parámetros si es necesario. Ejecutar la aplicación y ha de devolver los resultados de los cmdlets que ha llamado en el PowerShell y se puede ir desde allí.

Otros consejos

El código real adaptado del de MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx puede ser complicado porque hay que conseguir los permisos derecha y ejecutarlo en un macine con todos los plug-ins de cambio:

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;
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top