RobinNilsson
RobinNilsson

Reputation: 488

Query Local Administrator Group

So, I'm kind of stuck here...

I'm writing a program that should be able to list all users in the local administrator group on a MS Windows Server 2008 R2.

The problem here is that I'm only allowed to use .NET 2.0 - so I'm not able to use the GroupPrincipal Class... Which would have made this a really easy task.

Any pointers would be appriciated!

Cheers!

Upvotes: 1

Views: 7615

Answers (3)

dezox
dezox

Reputation: 179

If your are still looking for an answer, here:

If you'd like to get the administrator group, you can use this code:

public static DirectoryEntry GetLocalAdminstratorGroup()
{
    using (var WindowsActiveDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
    {
        return WindowsActiveDirectory.Children.Find(GetLocalizedAdministratorGroupName(), "group");
    }
}

//Localized == Language Independent
public static string GetLocalizedAdministratorGroupName()
{
    //For English Windows version, this equals "BUILTIN\Administrators".
    var adminGroupName = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null).Translate(typeof(NTAccount)).Value;

    //Remove the "BUILTIN\" part, get the local name of the group
    return adminGroupName.Split('\\')[1];
}

If you'd also like to enumerate it (like you need a username), you can do this, using the methods before:

object members = AdminGroup.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members)
{
    DirectoryEntry member = new DirectoryEntry(groupMember);
    Console.WriteLine(member.Name);
}

Upvotes: 0

RobinNilsson
RobinNilsson

Reputation: 488

Jeez!

Don't know what I was thinking really - it's so simple!

All creds to Masoud Tabatabaei - found the following codesnippet on: http://csharptuning.blogspot.se/2007/09/how-to-get-list-of-windows-user-in-c.html

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry admGroup = localMachine.Children.Find("administrators","group");
object members = admGroup.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members)
{
    DirectoryEntry member = new DirectoryEntry(groupMember);
    lstUsers.Items.Add(member.Name);
}

Upvotes: 5

Chintana Meegamarachchi
Chintana Meegamarachchi

Reputation: 1820

Did you try WMI ?

for example

ManagementObjectSearcher   search = new ManagementObjectSearcher(@"SELECT * FROM Win32_UserAccount where LocalAccount = true");
ManagementObjectCollection userList = search.Get();

foreach (ManagementObject user in userList)
{
    Console.WriteLine("User name: {0}, Full Name: {1}", 
        user["Name"].ToString(), user["FullName"].ToString());
}

Will give you a list of users in local SAM. You can add other attributes to the query and refine your list.

Do not forget to add a reference to System.Management.dll

Upvotes: 1

Related Questions