有没有办法通过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();
请提供建议并参考链接
答案 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