2010-05-28 75 views
0

我想比較一下我從AD獲取的計算機名稱和我想從機器使用WMI獲得的DNS主機名稱。解決WMI DNS主機名稱

我目前有:

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"); 
        } 
       } 
      } 
     } 

但我得到一個ManagementException >> DNSHOSTNAME = oneName.Properties [ 「DNSHOSTNAME」]的ToString(); < <這裏說找不到。 任何想法?

回答

1

根據您連接到此屬性的操作系統將不可用。您可以從documentation中看到它在Windows 2000和XP上不可用。但是,它在Win32_NetworkAdapterConfiguration類中可用,但您將收到多個對象,您必須循環才能獲取該名稱,因爲它們中的大多數都將爲空。

另外,dnsHostName = oneName.Properties["DNSHostName"].ToString();是不正確的。它應該是dnsHostName = oneName.Properties["DNSHostName"].Value.ToString()。同樣,如果您決定使用Win32_NetworkAdapterConfiguration,請記住它可以爲空。