2009-07-31 25 views
1

私はこのトピックの私の理解にはいくつかの欠点があると私は許します。私はドメインとアクティブディレクトリについて知っているのは、私がそれらを扱っていたからです。DNSドメイン名から短い「ドメイン名」を取得するにはどうすればよいですか?

ドメイン名には2つの異なる「バージョン」があります。最初は私がprefixnameようになるcompany.intようになるDNSドメイン名(ユーザー[email protected]用)と第二を呼んで(ユーザーprefixnameの\最大の場合)彼らは両方とも同じことを指すでしょう。

「company.int」を指定すると、「prefixname」に変換するにはどうすればよいですか?

EDIT:または、System.DirectoryServices.ActiveDirectory.Domainオブジェクトを指定した場合、プレフィックス名を取得するにはどうすればよいですか?

EDIT2:また、「プレフィックス名」にはそれ以外の名前がありますか?私はそれを何と呼ぶべきか分からない。

EDIT3:取得しようとしている値は、「ログオン先」(ドメインとコンピュータのリスト)の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"(通常)。

マルク・

+0

私はあなたがそれに努力を込めて答えを受け入れましたが、それは技術的には正しいですが、私は別の方法をとってきました。 Environment.UserDomainNameのコードを見て、私がすでに行っていたこと(Account.Value.Split( '\\')[0])が行く方法であることを確信しました。もしあなたが同意しないなら、なぜ私に教えてください。 –

+0

THanks、Max!私は環境変数が正しいドメイン名を保持していると信じています。何らかの理由でそれがクリアされていない限り、古い "DOS"環境に頼ることは、時には少し不安定です - 物事をクリアして削除することができます - 私が照会しているADコンテナは常にそこにあり、あなたが探している真の価値を常に保持します。 –

0

prefixnameは常にcompany.int(すなわち会社)の最初のラベルです。

+2

私が働くところそれは同じではありません。 –

0

System.DirectoryServices.DirectoryEntry.Pathをお探しですか?

とprefixnameはちょうど

EDITドメインと呼ばれる: 何Environment.UserDomainNameについて?

+0

いいえ、質問にbtwの説明を追加しました。 –

+0

別の可能性を追加するために編集 –

+0

Environment.UserDomainNameは私が望む値ですが、アプリケーションのユーザーの値が必要なときにその値を取得していると思われます。または任意の任意のDNSドメイン名に対して使用できます。 –

関連する問題