Как получить список доступных windows-кластеров
От: Vladimir_S  
Дата: 15.04.14 13:00
Оценка:
Подскажите, как программно получить список доступных windows-кластеров (windows server failover cluster),а также узнать список серверов, входящих в кластер?
Пробовал с помощью WinAPI-функции NetServerEnum получать список кластеров, но она не всегда возвращает требуемый результат, иногда завершается ошибкой 6118 (ERROR_NO_BROWSER_SERVERS_FOUND).
Re: Как получить список доступных windows-кластеров
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 15.04.14 14:21
Оценка: 13 (1)
Здравствуйте, Vladimir_S, Вы писали:

V_S>Подскажите, как программно получить список доступных windows-кластеров (windows server failover cluster),а также узнать список серверов, входящих в кластер?

Не являюсь специалистом в данной области, поэтому предположу на вскидку, что самым простым может оказаться вариант работы через WMI Failover Cluster Provider

P.S. Увы, под боком нет подходящего environment, чтобы попробовать самому.
Re[2]: Как получить список доступных windows-кластеров
От: Vladimir_S  
Дата: 16.04.14 05:32
Оценка:
Спасибо, буду пробовать.
Re[3]: Как получить список доступных windows-кластеров
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 17.04.14 05:10
Оценка:
Здравствуйте, Vladimir_S, Вы писали:

V_S>Спасибо, буду пробовать.

Если будет не сложно, поделитесь потом результатми изысканий (кто его знает где и что пригодится)
Re[4]: Как получить список доступных windows-кластеров
От: Vladimir_S  
Дата: 18.04.14 11:17
Оценка: 12 (1)
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, Vladimir_S, Вы писали:


V_S>>Спасибо, буду пробовать.

МР>Если будет не сложно, поделитесь потом результатми изысканий (кто его знает где и что пригодится)

Вот что у меня получилось:
Список кластеров получаю с помощью WinAPI-функции NetServerEnum, указав при ее вызове для параметра servertype значение SV_TYPE_CLUSTER_NT. Может быть можно и список кластеров найти с помощью WMI, но мне это не удалось.
Далее с помощью WMI получаю требуемую мне информацию. Например, так я получаю список узлов кластера:

string ClusterName = "ClusterName";
string NameSpace = "MSCluster";
System.Management.ConnectionOptions connOptions = new System.Management.ConnectionOptions();
connOptions.Authentication = AuthenticationLevel.PacketPrivacy;
//пользователя и пароль можно не задавать, тогда будет использоваться текущий пользователь
connOptions.Username = "User";
connOptions.Password = "Password";
System.Management.ManagementScope mgmtScope = new System.Management.ManagementScope(string.Format(@"\\{0}\root\{1}", ClusterName, NameSpace), connOptions);
mgmtScope.Connect();

ManagementObjectSearcher searcher = new ManagementObjectSearcher(mgmtScope, new SelectQuery("SELECT * FROM MSCluster_Cluster"));
foreach (ManagementObject queryObj in searcher.Get())
{
    Console.WriteLine(string.Format("Cluster Name: \"{0}\"", queryObj["Name"]));
}


Для получения другой информации в запросе WQL (WMI Query Language) надо указать имя требуемого класса.
А если использовать другое пространство имён (NameSpace) при создании mgmtScope, например, CIMV2, то можно получить очень много полезной информации о компьютере и системе.
На сайте Майкрософт есть полезная утилита "WMI Code Creator", которая позволяет просматривать имеющиеся пространства имён и классы, а также генерирует код для получения нужной информации.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.