使用C#删除Windows用户(远程)

时间:2019-03-22 09:49:13

标签: c# windows

我已经研究了一段时间了:

我尝试了System.DirectoryServices.AccountManagement和System.DirectoryServices。

当前,我已经关闭了System.Directory服务。这是我的代码:

// Connect to pc    
DirectoryEntry locaDirectoryEntry = new DirectoryEntry("WinNT://" + machineId);
// Find user by userName
    DirectoryEntry user = locaDirectoryEntry.Children.Find(userName);
// Remove the user
    locaDirectoryEntry.Children.Remove(user);
// Commit the changes
    locaDirectoryEntry.CommitChanges();

现在此代码删除了用户,因此我无法在“本地用户和组->用户”中看到它,但是用户个人资料仍然保留并变成“未知帐户”

现在,我已经访问了许多网站,但都找不到“完全”完成该操作的东西。我需要删除用户个人资料。

任何帮助/想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

好的,我会回答我自己的问题。

我上面指定的代码从计算机上删除了登录名,但是没有像Damien_The_Unbeliever所说的那样处理用户配置文件。

我一直在挖掘与我正在制作的应用程序等效的PowerShell,并发现我是如何做到的。我使用WMI删除用户个人资料。

这是我对任何可以使用它的灵魂的工作代码:

        public string RemoveUser(string machineId, string userName)
    {
        string result = null;

        try
        {
            // Create scope and set to computer root.
            ManagementScope scope = new ManagementScope(@"\\" + machineId + @"\root\cimv2");

            // Connect.
            scope.Connect();

            // Create the query for user profiles and a searcher.
            SelectQuery query = new SelectQuery("Win32_UserProfile");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

            // Go through each WMI Instance
            foreach (ManagementObject mo in searcher.Get())
            {
                // Normalize username
                string normalUser = mo["LocalPath"].ToString().Split('\\').Last(); 

                // Check whether this is the user to be deleted
                if (normalUser == userName)
                {
                    mo.Delete();
                    result = "Found user: " + userName + ". Deleting...";
                }

            }

            // This code deletes a user login
            //DirectoryEntry locaDirectoryEntry = new DirectoryEntry("WinNT://" + machineId);
            //DirectoryEntry user = locaDirectoryEntry.Children.Find(userName);
            //locaDirectoryEntry.Children.Remove(user);
            //locaDirectoryEntry.CommitChanges();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }

        return result;
    }

请参阅有关UserProfiles属性的链接: https://msdn.microsoft.com/en-us/library/ee886409(v=vs.85).aspx

这是Delete方法: https://docs.microsoft.com/en-us/dotnet/api/system.management.managementobject.delete?view=netframework-4.7.2