C# | Manage Local Users & Groups

На этот раз рассмотрим работу с локальными пользователями и группами в C#.

1. Создание пользователя.
2. Создание группы.
3. Добавление пользователя в группу.
4. Проверка, существует ли группа с заданным именем.
5. Проверка, является ли пользователь членом группы.

(Скачать)

1. Создание пользователя:

public static void CreateLocalUser(string login, string fullName, string password)
{
    var root = new DirectoryEntry(string.Format("WinNT://{0},computer", Environment.MachineName));
    using (var user = root.Children.Add(login, "user"))
    {
        user.Properties["FullName"].Value = fullName;
        user.Invoke("SetPassword", new object[] { password });
        user.CommitChanges();
    }
}

2. Создание группы:

public static void CreateLocalGroup(string name, string description)
{
    var root = new DirectoryEntry(string.Format("WinNT://{0},computer", Environment.MachineName));
    using (var group = root.Children.Add(name, "group"))
    {
        group.Invoke("Put", new object[] {"description", description});
        group.CommitChanges();
    }
}

3. Добавление пользователя в группу:

public static void AddLocalUserToLocalGroup(string userName, string groupName)
{
    string groupPath = string.Format("WinNT://{0}/{1},group", Environment.MachineName, groupName);
    string userPath = string.Format("WinNT://{0}/{1},user", Environment.MachineName, userName);
    var root = new DirectoryEntry(groupPath);
    root.Invoke("Add", new object[] { userPath });
    root.CommitChanges();
}

4. Проверка, существует ли группа с заданным именем:

public static bool IsLocalGroupExists(string name)
{
    var root = new DirectoryEntry(string.Format("WinNT://{0},computer", Environment.MachineName));
    try
    {
        root.Children.Find(name, "group");
        return true;
    }
    catch (COMException e)
    {
        if (e.ErrorCode == -2147022676)
            return false;
        throw;
    }
}

5. Проверка, является ли пользователь членом группы:

public static bool IsUserInLocalGroup(string userName, string groupName)
{
    var root = new DirectoryEntry(string.Format("WinNT://{0},computer", Environment.MachineName));
    root = root.Children.Find(userName, "user");
    var groups = root.Invoke("groups");
    foreach (var group in (IEnumerable) groups)
    {
        var groupEntry = new DirectoryEntry(group);
        if (string.Equals(groupEntry.Name, groupName, StringComparison.CurrentCultureIgnoreCase))
            return true;
    }
    return false;
}
Опубликовано в Dev. Метки: , , , , . Оставьте комментарий »

Ответить