2009-07-31 117 views
1

原諒我,如果我對這個主題的理解有一些缺點,我只知道我對域和活動目錄的瞭解,因爲我從與他們合作中找到了什麼。如何從dns域名中獲得簡短的「域名」?

域名有兩種不同的「版本」。第一個就是我所說的這將是像company.int DNS域名(用戶[email protected]),第二個會像prefixname(用戶prefixname \最大值)他們都會提到同樣的事情。

我的問題是,給出「company.int」,我該如何將其轉換爲「prefixname」?

編輯:或者給定System.DirectoryServices.ActiveDirectory.Domain對象,如何獲得prefixname?

編輯2:另外,是否有一個名稱爲「prefixname」以外的?我永遠不知道該怎麼稱呼它。編輯3:我試圖得到的價值是顯示在「登錄到」(它列出的域和您的計算機)的Windows登錄屏幕上相同的值。

EDIT4:我已經想通了,我可以做下述值:

SecurityIdentifier sid = GetCurrentUserSID(); 
string prefixName = sid.Translate(typeof(NTAccount)).Value.Split('\\')[0]; 

有誰知道一個更好的方法來得到這個名字嗎?

回答

4

這應該做到這一點,我希望:

private string GetNetbiosDomainName(string dnsDomainName) 
    { 
     string netbiosDomainName = string.Empty; 

     DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE"); 

     string configurationNamingContext = rootDSE.Properties["configurationNamingContext"][0].ToString(); 

     DirectoryEntry searchRoot = new DirectoryEntry("LDAP://cn=Partitions," + configurationNamingContext); 

     DirectorySearcher searcher = new DirectorySearcher(searchRoot); 
     searcher.SearchScope = SearchScope.OneLevel; 
     searcher.PropertiesToLoad.Add("netbiosname"); 
     searcher.Filter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", dnsDomainName); 

     SearchResult result = searcher.FindOne(); 

     if (result != null) 
     { 
      netbiosDomainName = result.Properties["netbiosname"][0].ToString(); 
     } 

     return netbiosDomainName; 
    } 

你基本上與「mydomain.com」,應找回NetBIOS域名,例如叫它「MYDOMAIN」(通常)。

Marc

0

據我所知,prefixname總是company.int(即公司)的第一個標籤。

+2

在我工作的地方是不一樣的。 – 2009-07-31 19:50:45

0

您是否在尋找System.DirectoryServices.DirectoryEntry.Path

和prefixname就被稱爲域

編輯: 什麼Environment.UserDomainName?

+0

不是。只是添加了更多的澄清問題順便說一句。 – 2009-07-31 20:25:36

+0

編輯添加另一種可能性 – 2009-07-31 20:36:56