UserSearcher / UserPrinciple: пользователи уже были удалены - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь использовать PrincipalSearcher для поиска любых пользователей с определенным DisplayName и их удаления.

Если нет пользователей с подходящим DisplayName, код работает нормально.Однако, если он найден, возникает исключение:

System.InvalidOperationException: Не удается удалить уже удаленный объект в System.DirectoryServices.AccountManagement.Principal.CheckDisposedOrDeleted () в System.DirectoryServices.AccountManagement.Principal.get_Name ()}

Я установил точку останова на user.delete () и могу подтвердить, что присутствует пользователь.Однако, как только вызывается Delete, возникает исключение.

Я не вижу, где был удален объект.Любая помощь будет оценена.

public string DeleteUsers()
{
    using (var principalContext = new PrincipalContext(
        ContextType.Machine, null
        ))
    {
        using (var userPrincipal = new UserPrincipal(principalContext))
        {
            // All users will have the same DisplayName
            userPrincipal.DisplayName = UserDisplayName;

            //
            // Search for all users with the above displayName
            //
            using (var principalSearcher = new PrincipalSearcher(
                userPrincipal
                ))
            {
                var users = principalSearcher.FindAll();
                string userString = "";

                // Loop through each of them and delete them
                foreach (var user in users)
                {
                    var username = user.Name;

                    try
                    {
                        user.Delete();
                    }
                    catch (Exception e)
                    {
                        return $"Error: Could not delete user: {username}. " +
                            $"{e.Message}";
                    }

                    if (!String.IsNullOrEmpty(userString))
                    {
                        userString += ", ";
                    }
                    userString += username;

                }

                if (String.IsNullOrEmpty(userString))
                {
                    return "No users deleted.";
                }

                return "Deleted the following users: " + userString;
            }
        }
    }
}
...