When I try to execute TakeOffline or BringOnline from the cluster resource, I get the following error:
System.Management.ManagementException: Generic failure at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options) At the same time, the resource successfully stops or starts.
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()); } } }