2013-02-02 1 views
1

Quelqu'un a-t-il un exemple de code C# sur la façon dont les objets de la classe Win32_ComputerSystem WMI peuvent être récupérés à partir d'un système distant en utilisant nom d'hôte, nom d'utilisateur et mot de passe?Demander Win32_ComputerSystem class remote

+0

Il suffit de regarder le code d'exemple dans l'article MSDN Library pour la classe ManagementScope. http://msdn.microsoft.com/en-us/library/w7sx1w4f.aspx –

Répondre

1

Connexion:

try 
     { 
      rcOptions = new ConnectionOptions(); 
      rcOptions.Authentication = AuthenticationLevel.Packet; 
      rcOptions.Impersonation = ImpersonationLevel.Impersonate; 
      rcOptions.EnablePrivileges = true; 
      rcOptions.Username = servername + @"\" + username; 
      rcOptions.Password = password; 

      mScope = new ManagementScope(String.Format(@"\\{0}\root\cimv2", servername), rcOptions); 
      mScope.Connect(); 
      if (mScope.IsConnected == true) { MessageBox.Show("Connection Succeeded", "Alert"); } else { MessageBox.Show("Connection Failed", "Alert"); } 
      if (mScope.IsConnected == true) { lblConnectionStateWarning.Text = "Connected"; } else { lblConnectionStateWarning.Text = "Disconnected"; } //I have a label that displays connectionstate, you can leave that out 

     } 
     catch (Exception ex) { MessageBox.Show(ex.Message); } 

Obtenir requête avec la méthode, le chargement dans dictonary & retour dans listview

private void FindWMI(string servername, string classSelection, ConnectionOptions rcOptions, ListView listView) 
     { 
      try 
      { 
       var dct = new Dictionary<string, string>(); 
       List<ListViewItem> itemsList = new List<ListViewItem>(); 
       oQuery = new ObjectQuery("select * from " + classSelection); 
       moSearcher = new ManagementObjectSearcher(mScope, oQuery); 
       moCollection = moSearcher.Get(); 

      Invoke(new MethodInvoker(() => 
      { 
       listView.Items.Clear(); 
      })); 

      foreach (ManagementObject mObject in moCollection) 
      { 
       if (mObject != null) 
       { 
        foreach (PropertyData propData in mObject.Properties) 
        { 
         if (propData.Value != null && propData.Value.ToString() != "" && propData.Name != null && propData.Name != "") 
          dct[propData.Name] = propData.Value.ToString(); 
//Don't forget this, when the result is an array, you want all the strings in that array.. 
if (propData.Value is Array) { dct[propData.Name] = ""; foreach (string stringArray in (string[])propData.Value) { dct[propData.Name] += stringArray + "\n"; } } 
        } 
       } 
      } 

      foreach (KeyValuePair<string, string> listItem in dct) 
      { 
       ListViewItem lstItem = new ListViewItem(listItem.Key); 
       lstItem.SubItems.Add(listItem.Value); 
       itemsList.Add(lstItem); 
      } 

      Invoke(new MethodInvoker(() => 
      { 
       listView.Items.AddRange(itemsList.ToArray()); 
      })); 
     } 
     catch (Exception) { } 
    } 
+0

@TWT Si vous utilisez cet exemple, la valeur de la propriété renvoie parfois un tableau, vous devez donc ajouter: if (propData.Value est Array) {dct [propData.Name] = ""; foreach (string stringArray dans (chaîne []) propData.Value) {dct [propData.Name] + = stringArray + "\ n"; }} –