如何使用C#在Active Directory用户路径中使用%username%变量?

时间:2019-01-05 21:08:31

标签: c# .net windows active-directory

我用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

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

%username%环境变量和一个使用的AD用户和计算机是不同的。单击“确定”后,“ AD用户和计算机”立即将其替换为实际的用户名值。这不是AD所能理解的,只是AD用户和计算机应用程序使用的令牌。

考虑到您已经使用用户名构造了一个字符串,您应该不会发现很难解决的问题。

user.HomeDirectory = $"\\fileserver1\UserHomes\{newUsername}";

powershell可能更适合于这种情况。