Frage

Ziel: Geben Sie einen Web-Dienst mit Visual Basic oder C # oder .NET, dass wirkt mit dem Exchange-Verwaltungsshell, sendet es Befehle Cmdlets ausführen, und gibt die Ergebnisse als XML. (Beachten Sie, dass wir jede lanaguage nutzen könnten, den Dienst zu schreiben, aber da es sich um eine Windows-Box ist, und wir haben Visual Studio 2008, schien es wie einfachste Lösung wäre es einfach verwenden werden, um eine VB / .NET Web-Service zu erstellen. In der Tat es, war ganz einfach so, nur Punkt zu tun, und klicken Sie auf.)

Problem: Wie ein Exchange-Verwaltungsshell-Cmdlets aus dem Web-Dienst ausgeführt werden, beispiel, Get-Distribution "Live-Präsident"

Es scheint, dass wir in der Lage sollten einen Powershell-Skript zu erstellen, die das Cmdlet ausgeführt wird, und in der Lage sein, das nennen über die Befehlszeile und damit nenne es einfach aus dem Programm heraus. Klingt das richtig? Wenn ja, wie würde ich über diese gehen? Vielen Dank. Antwort kann sprachunabhängig sein, aber Visual Basic wäre wahrscheinlich am besten sein, denn das ist, was ich den Test Webdienst geladen in.

War es hilfreich?

Lösung 2

Nun, hätte nicht eine Antwort, aber irgendwie es herausgefunden. Ich hatte ein Problem, ein 64-Bit-Powershell zu laufen bekommen, aber schließlich ein Upgrade auf Exchange 2010 und gebrauchten C # und dann gibt es kein Problem mehr.

Die kurze Antwort ist, dass Sie eine neue Powershell-Anwendung in Visual Studio erstellen, dann Sie einen Verweis auf die System.Management.Automation DLL hinzufügen. Auf diese Weise können Sie einen Namespace für Powershell einzurichten und Anrufe zu machen. http://msdn.microsoft.com /en-us/library/system.management.automation(VS.85).aspx erstellen Sie eine Pipeline die zur Verfügung stehende Pipeline-Klasse http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces .pipeline (VS.85) aspx , um Ihre Befehle Rohr zurück. Dann legen Sie Ihre Befehle in, Add Parameter, wenn nötig. Führen Sie die App und es werden die Ergebnisse aus den Cmdlets kehren Sie in der Powershell aufgerufen und Sie können von dort aus gehen.

Andere Tipps

Der tatsächliche Code aus von MSDN angepasst http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx kann schwierig sein, weil Sie Recht, die Berechtigungen erhalten müssen und es auf einem macine laufen mit all Exchange-Plug-In:

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;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top