【发布时间】:2019-01-05 21:08:31
【问题描述】:
我用 C# 开发了一个 Active Directory 用户管理工具,它可以自动执行一些操作。对于我的特殊情况,这比 Microsoft 的“Active Directory 用户和计算机”工具更好。我必须使用包含用户用户名的漫游配置文件和主目录。
现在我想用我的 C# 程序更改用户的用户名。一切正常,但我想使用“%username%”变量而不是将新用户名直接放入这些路径(主目录和漫游配置文件),因为通过使用该变量,我确保将放置新用户名如果我使用 Microsoft 的 AD 管理工具(右键单击 -->“复制”)复制用户对象,则进入这些路径。
如果我在使用 Microsoft 的 AD 工具创建或编辑用户时输入“%username%”,此变量将被用户名替换,因此它可以工作。但是,如果我使用 C# 将此变量放入路径中,它只会将字符串“%username%”放在路径的末尾(例如“\fileserver1\UserHomes\%username%”)。它不会用实际的用户名替换它并“存储”该占位符。
如何在我的 C# 代码中正确使用此变量,以便将其替换为实际用户名?
我正在使用此代码(简化,这只是一个示例)来更改用户的用户名 (SamAccountName),例如,主目录。 “用户”是我的 UserPrincipal 对象。当然,我在此之后重命名实际文件夹:
[...]
string newUsername = "NewUsername"; // New username
user.SamAccountName = newUsername;
user.UserPrincipalName = $"{ newUsername }@{ domain }";
user.HomeDirectory = "\\fileserver1\UserHomes\%username%";
user.Save(); // Save changes
【问题讨论】:
-
你试过
Environment.ExpandEnvironmentVariables("\\your\\path\\%username%")吗? docs.microsoft.com/en-us/dotnet/api/…
标签: c# .net windows active-directory