簡體   English   中英

從SID獲取user @ domain而不是domain \\ user

[英]From SID get user@domain not domain\user

這有點模糊不清:我需要獲取用戶/組的用戶@域形式,但我不想要域\\用戶表單。 我遇到一個問題,一個長的Windows 2003+名稱,其中兩個是不同的,因為域\\用戶長度限制,因為新的表單沒有限制。

我在C#下,雖然我可以做以下事情:

string GetUserName(SecurityIdentifier SID)
{
    NTAccount account = SID.Translate(typeof(NTAccount));
    string [] splits = string.Split("\\", account.Value);
    return splits[1] + @"@" + splits[0];
}

這並不總是正確的,正如我在我的介紹中所說,用戶名@ domain與用戶名的舊Windows NT形式不一樣。 如果您不相信我,請進入2k3 +盒子上的AD用戶和計算機,看看舊NT用戶名與新用戶名的區別。

那么我如何保證從SID獲得正確的用戶名@ domain? 除此之外,我還需要這種類型的東西為本地用戶/組工作。

用於獲取此功能的Windows API稱為DsCrackNames - http://msdn.microsoft.com/en-us/library/ms675970 它將根據您提供的標志以任意數量的格式提供輸出。

你不能使用System.DirectoryServices.AccountManagement.Principal和UPN(你的name@domain.com)來查找Sid(也是主體上的屬性)?
http://msdn.microsoft.com/en-us/library/bb340707.aspx

這是一個TechNet代碼段,它使用DirectorySearcher通過UPN搜索用戶
http://gallery.technet.microsoft.com/ScriptCenter/de2cb677-f930-40a5-867d-ea0326ccbcdb/

獲取主體后,您應該能夠獲得Sid屬性。

我發布了一些用於從SID中檢索用戶數據的 C#代碼,這與您的問題相同:

/* Retreiving object from SID 
  */ 
string SidLDAPURLForm = "LDAP://WM2008R2ENT:389/<SID={0}>"; 
System.Security.Principal.SecurityIdentifier sidToFind = new System.Security.Principal.SecurityIdentifier("S-1-5-21-3115856885-816991240-3296679909-1106"); 

DirectoryEntry userEntry = new DirectoryEntry(string.Format(SidLDAPURLForm, sidToFind.Value)); 
string name = userEntry.Properties["userPrincipalName"].Value.ToString(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM