如何在C#中检测目标服务器中安装的交换版本?

时间:2013-03-07 12:54:08

标签: c# exchange-server

有没有办法通过c#检测哪个版本的Exchange Server正在运行(2003或2007或2010)?

我已经完成了here。但是在power shell 1.0中不支持使用“\ ROOT \ MicrosoftExchangeV2”运行WMI查询。

因为我有一个scenerio来获取在特定服务器中找到的所有用户和组邮箱列表并转换为csv文件。

以下是我们计划在C#中实施的方式

if(ExchangeVersion == "2003")
   GetExchange2003UserList();
else if(ExchangeVersion == "2007")
   GetExchange2007UserList();
else if(ExchangeVersion == "2010")
   GetExchange2010serList();

请提供建议并参考链接

2 个答案:

答案 0 :(得分:2)

我可以使用CN = Configuration,DC = domain,DC = local命名上下文中的Active Directory LDAP Query来完成。我在这里分享代码:

 public static string getExchangeServerVersion()
        {
            try
            {
                string domain =Domain.GetCurrentDomain().ToString();
                DirectoryEntry rootDSE = new DirectoryEntry(string.Format("LDAP://{0}/rootDSE",  domain));
                DirectoryEntry objDirectoryEntry = new DirectoryEntry(string.Format("LDAP://{0}/{1}",domain,rootDSE.Properties["configurationNamingContext"].Value.ToString()));
                DirectorySearcher searcher = new DirectorySearcher(objDirectoryEntry, "(&(objectClass=msExchExchangeServer))");
                SearchResultCollection col = searcher.FindAll();
                string version = string.Empty;
                foreach (SearchResult result in col)
                {
                    DirectoryEntry user = result.GetDirectoryEntry();
                    if (String.Equals(user.Properties["name"].Value.ToString(),Dns.GetHostName(),StringComparison.InvariantCultureIgnoreCase))
                    {
                        version = user.Properties["serialNumber"].Value.ToString();
                        break;
                    }
                }
                return version;

            }
            catch (Exception ex)
            {
                Console.WriteLine("\nError : " + ex.Message);
                return "";
            }
        }

主要功能:

static void main()
{

     string exchangeServerVersion = string.Empty;
     exchangeServerVersion =getExchangeServerVersion();
     if (exchangeServerVersion.Contains("Version 6"))
            {
                users.GetExchange2003UserList();
                GetADGroupList();
            }
            else if (exchangeServerVersion.Contains("Version 8"))
            {
                users.GetExchange2007UserList();
                GetADGroupList();
            }
            else if (exchangeServerVersion.Contains("Version 14"))
            {
                users.GetExchange2010UserList();
                GetADGroupList();
            }
}

由于所有版本都支持ldap。希望它适用于所有人。

如果有任何其他方式从C#获得交换版本,请分享。

答案 1 :(得分:0)

其他方法是通过powershell命令let获取它

Get-ExchangeServer |格式列表名称,版本,AdminDisplayVersion