2

Я пытаюсь использовать метод, который принимает имя пользователя и возвращает true, если этот пользователь является локальным администратором (а не во всем домене, только локальном компьютере) и false в противном случае. Я попытался изменить технику, найденную в In .NET/C# test if process has administrative privileges, чтобы работать, но это не так. Я попытался использовать способ NetUserGetInfo, но не смог заставить это работать. Теперь я пытаюсь использовать UserPrincipal. Следующий код - это все, что у меня есть ... в основном просто проверка того, что основы работали, и они это делают.Использование UserPrincipal для проверки локального администратора

PrincipalContext ctx = new PrincipalContext(ContextType.Machine); 
UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userId); 

if(usr == null) 
{ 
    Console.WriteLine("usr is null"); 
} 
else 
{ 
    Console.WriteLine(usr.Enabled); 
    Console.WriteLine(usr.IsAccountLockedOut()); 

    foreach (Principal p in usr.GetAuthorizationGroups()) 
    { 
     Console.WriteLine(p.ToString()); 
    } 
} 

Похоже, что я должен быть в состоянии использовать метод isMemberOf, но как я могу сделать группу для местных администраторов? Или есть лучший способ, чем метод isMemberOf?

ответ

2

Ну, на самом деле я могу просто проверить, был ли один из Принципов, возвращенных из GetAuthorizationGroups()), равным «Администраторам».

foreach (Principal p in usr.GetAuthorizationGroups()) 
{ 
    if (p.ToString() == "Administrators") 
    { 
     result = true; 
    } 
} 
+0

Имейте в виду, что это работает только для английских машин. знак равно – Jens

1

Другая возможность. Если вы получите WindowsIdentity из объекта UserPrincipal. Вы можете использовать метод IsInRole (groupname).

Вы можете получить WindowsIdentity делая

var identity = new WindowsIdentity(string sUserPrincipalName); 

// then use this method to check the Identity against any Active Directory group. 
public static bool UserIsInRole(WindowsIdentity identity, string group) 
{ 
    try 
    { 
     return new WindowsPrincipal(identity).IsInRole(group); 
    } 
    catch (Exception ex) 
    { 
     //Error checking role membership 
     return false; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^