Domanda

Obiettivo: Fornire un servizio Web utilizzando Visual Basic o C # o .NET che interagisce con Exchange Management Shell, l'invio di comandi da eseguire i cmdlet, e restituire i risultati in formato XML. (Si noti che abbiamo potuto usare qualsiasi lanaguage di scrivere il servizio, ma dal momento che è una scatola di Windows e disporre di Visual Studio 2008, sembrava che la soluzione più semplice sarebbe solo usarlo per creare un servizio web VB / .NET. In effetti, era abbastanza facile farlo, basta puntare e cliccare.)

Problema: Come eseguire un cmdlet di Exchange Management Shell dal servizio web, per esempio, Get-DistributionGroupMember "Presidenti in diretta"

Sembra che dovremmo essere in grado di creare uno script PowerShell che gestisce il cmdlet, ed essere in grado di chiamare che dalla riga di comando, e quindi basta chiamare dall'interno del programma. Vi sembra giusto? Se sì, come dovrei fare per questo? Grazie. Risposta può essere lingua agnostico, ma Visual Basic probabilmente sarebbe meglio dato che questo è ciò che ho caricato il servizio di test Web in.

È stato utile?

Soluzione 2

Bene, non ha ottenuto una risposta, ma una sorta di capito. Ho avuto problemi a trovare un 64-bit PowerShell per correre, ma alla fine l'aggiornamento a Exchange 2010 e utilizzato C # e poi non c'era più un problema.

La risposta breve è che si crea una nuova applicazione PowerShell in Visual Studio, quindi si aggiunge un riferimento alla DLL System.Management.Automation. Questo ti permette di impostare uno spazio dei nomi per PowerShell ed effettuare chiamate ad esso. http://msdn.microsoft.com /en-us/library/system.management.automation(VS.85).aspx Si crea una pipeline utilizzando la classe disponibile Pipeline http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces .pipeline (VS.85) aspx al fine di tubo i comandi indietro. Poi mettete i vostri comandi, i parametri aggiuntivi, se necessario. Eseguire l'applicazione e restituirà i risultati dei cmdlet si chiamato in PowerShell e si può passare da lì.

Altri suggerimenti

Il codice effettivo adattato da da MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx può essere difficile perché si deve ottenere i permessi a destra ed eseguirlo su un macine con tutti i plug-in di 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;
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top