如果你想要一個簡單的方法,我會說UserPrincipal.GetAuthorizationGroups是很容易的。唯一的問題是你只能在.NET 3.5或更高版本中找到它。
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "YourUser"))
{
foreach (Principal p in user.GetAuthorizationGroups())
{
Console.WriteLine(p.Name);
}
}
}
GetAuthorizationGroups
返回所有嵌套組,包括衆所周知的SID。它嘗試檢索嵌套組信息的不同方式。事實上,它使用的方法之一是使用DirectoryEntry
來訪問tokenGroups
屬性。
UPDATE
要檢查當前用戶是否在NT AUTHORITY\INTERACTIVE
或LOCAL
,我們可以使用WindowsIdentity.Groups
,其中令牌直接檢索當前登錄。請注意,NT AUTHORITY\INTERACTIVE
和LOCAL
的成員資格是在運行時確定的。基於您現在登錄到該系統的事實將用戶分配到這些組。同樣,在我的Windows 7上,我可以看到我當前的登錄用戶也是NT AUTHORITY\REMOTE INTERACTIVE LOGON
的成員,因爲我是通過遠程桌面登錄的。
WindowsIdentity id = WindowsIdentity.GetCurrent();
foreach (var group in id.Groups)
{
Console.WriteLine(((NTAccount)group.Translate(typeof(NTAccount))).Value);
}
我很抱歉,我不知道有什麼辦法讓NT AUTHORITY\INTERACTIVE
會員資格任何任意用戶。我懷疑沒有這樣的方式,因爲這種類型的組成員資格只有在該用戶真正登錄時纔在運行時確定。
感謝哈維,您的解決方案几乎囊括了一切。它仍然缺少一些SID(雖然LOCAL,CONSOLE LOGON,NT AUTHORITY \ INTERACTIVE ...)但我仍然不知道是否需要它們。任何想法如何獲得這些? – 2011-03-01 16:53:14
@Marcel請檢查我的更新回答 – 2011-03-01 17:57:47
感謝哈維,你的例子和解釋都不是完美的。 – 2011-03-01 18:44:30