При попытке выполнить TakeOffline или BringOnline у ресурса кластера получаю следующую ошибку:
System.Management.ManagementException: Generic failure
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options)
При этом ресурс успешно останавливается или запускается.
ClusterManager
public class ClusterManager
{
private readonly string ClusterName;
private readonly string ClusterNamespace;
private ManagementScope Scope;
private readonly ConnectionOptions Options;
public ClusterManager(string clusterName, string clusterNameSpace, string user, string password)
{
ClusterName = clusterName;
ClusterNamespace = clusterNameSpace;
EnvironmentManager env = EnvironmentManager.Instance();
Options = new ConnectionOptions
{
Authentication = AuthenticationLevel.PacketPrivacy,
Username = env.UserName,
Password = env.Password
};
}
public void Connect()
{
Scope = new ManagementScope($@"\\{ClusterName}\root\{ClusterNamespace}", Options);
Scope.Connect();
}
public ManagementObject GetResource(string name)
{
string wmiClassName = "MSCluster_Resource";
ManagementClass managementClass = new ManagementClass(Scope, new ManagementPath(wmiClassName), null);
managementClass.Get();
ManagementObjectCollection objectCollection = managementClass.GetInstances();
foreach (ManagementBaseObject obj in objectCollection)
{
ManagementObject resource = (ManagementObject)obj;
if (resource["Name"].ToString() == name)
{
return resource;
}
}
return null;
}
public List<ManagementObject> GetClusterNodes()
{
List<ManagementObject> list = new List<ManagementObject>();
string wmiClassName = "MSCluster_Node";
ManagementClass managementClass = new ManagementClass(Scope, new ManagementPath(wmiClassName), null);
managementClass.Get();
ManagementObjectCollection objectCollection = managementClass.GetInstances();
foreach (ManagementBaseObject obj in objectCollection)
{
list.Add((ManagementObject)obj);
}
return list;
}
public void TakeOffline(ManagementObject resource)
{
try
{
resource.InvokeMethod("Takeoffline", null, null);
}
catch (Exception ex)
{
// ошибка здесь
LogManager.Error(ex.ToString());
}
}
public void BringOnline(ManagementObject resource)
{
try
{
resource.InvokeMethod("Bringonline", null, null);
}
catch (Exception ex)
{
// ошибка здесь
LogManager.Error(ex.ToString());
}
}
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости