2010-04-14 141 views
0

目標:提供使用Visual Basic或C#或.NET與Exchange命令行管理程序交互的Web服務,向其發送命令以運行cmdlet並返回結果作爲XML。 (請注意,我們可以使用任何語言來編寫服務,但由於它是一個Windows Box,並且我們有Visual Studio 2008,所以似乎最簡單的解決方案就是使用它來創建VB/.NET Web服務。的確,它是很容易做到的,只是指向和點擊)從Visual Basic/C#/ .NET運行Exchange命令行管理程序cmdlet應用程序

問題:如何運行從Web服務,比如在Exchange命令行管理程序cmdlet的,則Get-DistributionGroupMember「實時總統」

看來,我們應該能夠創建一個運行該cmdlet的PowerShell腳本,並且能夠從命令行調用該腳本,因此只需從程序中調用該腳本即可。這聽起來正確嗎?如果是的話,我會怎麼做呢?謝謝。答案可以是語言不可知的,但Visual Basic可能是最好的,因爲這是我加載測試Web服務了。

回答

0

嗯,沒有得到答案,但有點解決它。我在運行64位PowerShell時遇到了問題,但最終升級到Exchange 2010並使用C#,因此不再有問題。

簡單的答案是,您在Visual Studio中創建一個新的PowerShell應用程序,然後添加對System.Management.Automation dll的引用。這使您可以爲Powershell設置一個名稱空間並調用它。 http://msdn.microsoft.com/en-us/library/system.management.automation(VS.85).aspx您可以使用可用的管道類http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.pipeline(VS.85).aspx創建管道,以便將管道命令返回。然後你把你的命令,如果需要添加參數。運行該應用程序,它會返回您在PowerShell中調用的cmdlet的結果,然後您可以從該處啓動。

+0

你如何獲得Exchange管理外殼cmdlet顯示?看來你需要以某種方式添加對它們的引用,否則我會得到一個他們不存在的錯誤。 – Andrey 2012-02-23 22:48:45

+0

@Andrey你知道如何讓EMS cmdlet出現嗎? – 2012-07-19 09:20:02

1

適應從MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx實際的代碼可能會非常棘手,因爲你必須得到許可權和一個MACINE與所有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; 
    } 
相關問題