Visual Basicの/ C#/。NETアプリからファイル名を指定して実行Exchange管理シェルコマンドレット

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

  •  27-09-2019
  •  | 
  •  

質問

目標:Visual BasicまたはC#や.NETを使用してWebサービスを提供することを、Exchange管理シェルとの相互作用、それがコマンドレットを実行し、XMLとして結果を返すようにコマンドを送信します。 (私たちはサービスを作成するために、任意のlanaguageを使用できることに注意してください、それはWindowsのボックスであるため、私たちの最も簡単な解決策は、単にVB / .NET Webサービスを作成するためにそれを使用することになるように。実際のVisual Studio 2008は、それは、それを思えてきました、ちょうどポイント、そうするのは非常に簡単でしたし、クリックしてください。)

問題:どのようにWebサービスからExchange管理シェルコマンドレットを実行するには、例えば、取得-DistributionGroupMember「をライブ大統領」

私たちは、コマンドレットを実行するPowerShellスクリプトを作成することができ、コマンドラインからということを呼び出すことができるので、ちょうどプログラムの中からそれを呼び出す必要があると思われます。この音は正しいしていますか?もしそうならどのように私はこれについて行くでしょうか?ありがとうございました。答えは、言語に依存しないことができますが、それは私がテストWebサービスをロードするものであるため、Visual Basicはおそらく最高になります。

役に立ちましたか?

解決 2

さて、その答えが、それを考え出したの並べ替えを取得できませんでした。私が問題に実行する64ビットのPowerShellを取得しなかったが、最終的にはExchange 2010にアップグレードすると使用済みのC#と、もはや問題がありました。

短い答えは、あなたが、あなたはSystem.Management.Automation DLLへの参照を追加し、Visual Studioで新しいPowerShellのアプリケーションを作成することです。これはPowerShellの名前空間を設定し、それに電話をかけることができます。 http://msdn.microsoft.com /en-us/library/system.management.automation(VS.85).aspx に使用可能なパイプラインクラス<のhref = "http://msdn.microsoft.com/en-usを使用してパイプラインを作成します/library/system.management.automation.runspaces.pipeline(VS.85).aspx」のrel = "nofollowをnoreferrer"> 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の上でそれを実行する必要があるため注意が必要です為替プラグインの全てます:

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