3

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

我经历过 这里 。但在 power shell 1.0 中不支持使用“\ROOT\MicrosoftExchangeV2”运行 WMI 查询。

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

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

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

请提供建议并参考链接

4

2 回答 2

3

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

 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# 获取交换版本,请分享。

于 2013-03-08T05:47:32.543 回答
0

另一种方法是使用 powershell 命令获取它

获取-ExchangeServer | 格式列表名称、版本、AdminDisplayVersion

于 2019-08-08T09:27:09.783 回答