Question

Objectif: Fournir un service Web en utilisant Visual Basic ou C # .NET ou qui interagit avec Exchange Management Shell, envoyer des commandes à exécuter cmdlets et retourner les résultats au format XML. (Notez que nous pourrions utiliser tout lanaguage pour écrire le service, mais comme il est un ordinateur Windows Box et nous avons Visual Studio 2008, il semblait que la solution la plus simple serait simplement l'utiliser pour créer un service Web VB / .NET. En effet, était assez facile de le faire, le point juste et cliquez sur.)

Problème: Comment exécuter une applet de commande Exchange Management Shell du service Web, par exemple, Get-DistributionGroupMember "présidents vivants"

Il semble que nous devrions être en mesure de créer un script PowerShell qui exécute l'applet de commande, et être en mesure d'appeler à partir de la ligne de commande, et donc simplement l'appeler à partir du programme. Est-ce son correct? Si oui, comment pourrais-je aller à ce sujet? Merci. Réponse peut être agnostique de la langue, mais Visual Basic serait probablement mieux puisque c'est ce que j'ai chargé le service Web de test dans.

Était-ce utile?

La solution 2

Eh bien, n'a pas obtenu de réponse, mais en quelque sorte compris. J'ai eu un problème pour obtenir un PowerShell 64 bits pour exécuter, mais finalement mis à jour vers Exchange 2010 et utilisé C # et il n'y avait plus un problème.

La réponse courte est que vous créez une nouvelle application PowerShell dans Visual Studio, puis vous ajoutez une référence à la dll System.Management.Automation. Cela vous permet de configurer un espace de noms pour Powershell et fait des appels. http://msdn.microsoft.com /en-us/library/system.management.automation(VS.85).aspx Vous créez un pipeline en utilisant la classe pipeline disponible http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces .pipeline (VS.85) .aspx pour tuyau vos commandes en arrière. Ensuite, vous mettez vos commandes, paramètres add si nécessaire. Exécutez l'application et il retournera les résultats des applets de commande que vous avez appelé dans le PowerShell et vous pouvez aller à partir de là.

Autres conseils

Le code réel adapté à partir de MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx peut être difficile parce que vous devez obtenir les permissions et l'exécuter sur un macine avec tous les plug-ins d'échange:

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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top