2010-05-28 4 views
0

J'essaie de faire une comparaison entre un nom de machine que j'ai récupéré depuis AD et le nom d'hôte DNS que je veux obtenir en utilisant WMI de la machine.Résolution du nom d'hôte DNS WMI

J'ai actuellement:

foreach (SearchResult oneMachine in allMachinesCollected) 
      { 
       pcName = oneMachine.Properties["name"][0].ToString(); 
       ConnectionOptions setupConnection = new ConnectionOptions(); 
       setupConnection.Username = USERNAME; 
       setupConnection.Password = PASSWORD; 
       setupConnection.Authority = "ntlmdomain:DOMAIN"; 
       ManagementScope setupScope = new ManagementScope("\\\\" + pcName + "\\root\\cimv2", setupConnection); 
       setupScope.Connect(); 

       ObjectQuery dnsNameQuery = new ObjectQuery("SELECT * FROM Win32_ComputerSystem"); 
       ManagementObjectSearcher dnsNameSearch = new ManagementObjectSearcher(setupScope, dnsNameQuery); 
       ManagementObjectCollection allDNSNames = dnsNameSearch.Get(); 
       string dnsHostName; 
       foreach (ManagementObject oneName in allDNSNames) 
       { 
        dnsHostName = oneName.Properties["DNSHostName"].ToString(); 
        if (dnsHostName == pcName) 
        { 
         shutdownMethods.ShutdownMachine(pcName, USERNAME, PASSWORD); 
         MessageBox.Show(pcName + " has been sent the reboot command"); 
        } 
       } 
      } 
     } 

Mais je reçois un ManagementException >> dnsHostName = oneName.Properties [ "DNSHostName"] ToString();. < < ici disant non trouvé. Des idées?

Répondre

1

Selon le système d'exploitation auquel vous vous connectez, cette propriété ne sera pas disponible. Vous pouvez voir à partir du documentation qu'il n'est pas disponible sur Windows 2000 et XP. Cependant, il est disponible dans la classe Win32_NetworkAdapterConfiguration, mais vous recevrez plus d'un objet, que vous devrez parcourir pour obtenir le nom car la plupart d'entre eux seront null. En outre, dnsHostName = oneName.Properties["DNSHostName"].ToString(); n'est pas correct. Il devrait être dnsHostName = oneName.Properties["DNSHostName"].Value.ToString(). Encore une fois, si vous décidez d'utiliser Win32_NetworkAdapterConfiguration, gardez à l'esprit qu'il peut être null.

Questions connexes