2011-02-01 5 views
8

Я пытаюсь запустить/остановить кластер на основе Windows на C#, ниже приведен код, с которым я работаю до сих пор ... когда я получаю функцию TakeOffLine ниже, я получаю сообщение «Не найдено», исключение из System.Management.ManagementStatus.NotFound. Не знаете, что точно не найдено? Если есть (альтернативный) лучший способ сделать это, пожалуйста, дайте мне знать.Управление кластером Windows из C#

Спасибо!

using System.Management; 
class App 
{ 
    public static void Main() 
    { 
     string clusterName = "clusterHex"; // cluster alias 
     string custerGroupResource = "clusterHex.internal.com"; // Cluster group name 

     ConnectionOptions options = new ConnectionOptions(); 
     options.Authentication = System.Management.AuthenticationLevel.PacketPrivacy; 

     // Connect with the mscluster WMI namespace on the cluster named "MyCluster" 
     ManagementScope s = new ManagementScope("\\\\" + clusterName + 
      "\\root\\mscluster", options); 

     ManagementPath p = new ManagementPath("Mscluster_Clustergroup.Name='" + custerGroupResource + "'"); 

     using (ManagementObject clrg = new ManagementObject(s, p, null)) 
     { 
      // Take clustergroup off line and read its status property when done 
      TakeOffLine(clrg); 
      clrg.Get(); 
      Console.WriteLine(clrg["Status"]); 
      System.Threading.Thread.Sleep(3000); // Sleep for a while 
      // Bring back online and get status. 
      BringOnLine(clrg); 
      clrg.Get(); 
      Console.WriteLine(clrg["Status"]); 

     } 
    } 
    static void TakeOffLine(ManagementObject resourceGroup) 
    { 
     ManagementBaseObject outParams = 
     resourceGroup.InvokeMethod("Takeoffline", null, null); 
    } 
    static void BringOnLine(ManagementObject resourceGroup) 
    { 
     ManagementBaseObject outParams = 
     resourceGroup.InvokeMethod("Takeoffline", null, null); 
    } 
} 
+1

Нет пути использования командлетов Powershell вместо этого? –

+4

Вы заметили, что и TakeOffline, и BringOnLine вызывают Takeoffline. –

ответ

3

Похоже, что вам не хватает случая в вызове метода. Вы должны использовать TakeOffline согласно msdn

static void TakeOffLine(ManagementObject resourceGroup) 
{ 
    ManagementBaseObject outParams = 
    resourceGroup.InvokeMethod("TakeOffline", null, null); 
} 
Смежные вопросы