【发布时间】:2011-08-14 12:50:38
【问题描述】:
如何以编程方式更改 Windows 用户名(使用一些 API 或命令行工具) 或者如何重命名windows用户?
【问题讨论】:
-
为什么?这是一个典型的问题!并且没有关于它的资源!!!
-
你想达到什么目的?您要临时登录其他用户吗?
-
没有。我需要更改某些特定 Windows 用户的登录名或用户名。
如何以编程方式更改 Windows 用户名(使用一些 API 或命令行工具) 或者如何重命名windows用户?
【问题讨论】:
我已经编写了一些小方法来使用 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;
}
【讨论】:
using (var entry = new DirectoryEntry($"WinNT://{Environment.MachineName}/{oldLoginName}")) entry.Rename(newLoginName);,它运行良好!
您可以使用 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;
}
【讨论】:
在 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 使用了额外的插件。
编辑
关于主题的另一个链接以澄清我的意思:
Change user name on Windows7 Professional
希望这会有所帮助。
【讨论】: