以编程方式更改一些Windows用户名(重命名Windows用户)

时间:2011-08-14 12:50:38

标签: c# .net windows windows-7

如何以编程方式更改Windows用户名(使用某些API或命令行工具) 或者如何重命名Windows用户?

3 个答案:

答案 0 :(得分:4)

您无法在Windows系统上明显更改用户的名称,因为它对于许多内部资源来说都是key,但您可以更改它的DisplayName,顺便说一下,不会影响内部文件结构,所以有cosmetic种变化。这很可能会给你或同一台机器上的其他用户多年使用造成混淆,所以我建议不要这样做。但是,如果您愿意,这里有powershell脚本示例,应该适合您:

  $CurrentUserName = "Your_Domain_Name/Current_User_Name" 
    Get-QADUser -SearchRoot $CurrentUserName  `
    | Set-QADUser -DisplayName "New_User_Name" `
    | FT FirstName, LastName, DisplayName, company

有关更详细的说明,请看这个好例子:

Change user DisplayName from powershell

请注意,这里他们为PowerShell使用extraplugin。

修改

另一个关于主题的链接,以澄清我的意思:

Change user name on Windows7 Professional

希望这有帮助。

答案 1 :(得分:4)

您可以使用NetUserSetInfo函数更改用户帐户的用户名。

如果您只想更改用户名,请将level参数设置为0并传递USER_INFO_0结构。如果您想一次更改多个内容,可以使用不同的级别。

这是我成功用于更改用户名的一小段代码:

#include <Windows.h>
#include <LM.h>

#include <stdio.h>

#pragma comment(lib, "netapi32.lib")

int main(int argc, char ** argv)
{
    USER_INFO_0 ui0;
    NET_API_STATUS result;
    LPWSTR command = GetCommandLineW();
    wchar_t newname[21];

    while (*command != L'*') command++;

    command++;

    ui0.usri0_name = newname;
    wcscpy_s(newname, _countof(newname), L"decommiss-");
    wcscat_s(newname, _countof(newname), command);

    result = NetUserSetInfo(NULL, command, 0, (LPBYTE)&ui0, NULL);

    printf("%u\n", result);

    return result;
}    

答案 2 :(得分:4)

我已经编写了一些使用System.DirectoryServices.DirectoryEntry类重命名Windows用户的小方法。

public bool RenameUser(string oldLoginName, string newLoginName)
{
    bool renamed = false;
    try
    {
        using (DirectoryEntry AD = new
                   DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
        {
            try
            {
                using (DirectoryEntry NewUser = AD.Children.Find(oldLoginName, "user"))
                {
                    if (NewUser != null)
                    {
                        NewUser.Rename(newLoginName);
                        renamed = true;
                    }
                }
            }
            catch (Exception ex)
            {
                //TODO: Log
            }
        }
    }
    catch (Exception ex)
    {
         //TODO: Log
    }
    return renamed;
}