【问题标题】:How to use %username% variable in Active Directory user paths using C#?如何使用 C# 在 Active Directory 用户路径中使用 %username% 变量?
【发布时间】: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

【问题讨论】:

标签: c# .net windows active-directory


【解决方案1】:

%username% 环境变量和使用的 AD 用户和计算机不一样。当您单击确定时,AD 用户和计算机会立即将其替换为实际用户名值。它不是 AD 理解的东西,只是 AD 用户和计算机应用程序使用的令牌。

考虑到您已经使用用户名构建了一个字符串,您应该不会觉得修复这个问题很困难。

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

powershell 可能更适合这样的事情。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多