You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#删除域控制器中AD对象的SidHistory

移除Active Directory用户的SidHistory属性(C#实现)

对应PowerShell逻辑

你提供的PowerShell代码核心逻辑是:查询目标用户并加载sidhistory属性,然后通过传入当前属性值执行移除操作来清除该属性。

C#实现代码

using System.DirectoryServices;

public void ClearUserSidHistory(string targetUsername)
{
    // 替换为你的Active Directory域名LDAP路径,例如"LDAP://DC=contoso,DC=com"
    string ldapDomainPath = "LDAP://DC=yourdomain,DC=com";

    using (DirectoryEntry domainRoot = new DirectoryEntry(ldapDomainPath))
    {
        using (DirectorySearcher userSearcher = new DirectorySearcher(domainRoot))
        {
            // 构建用户查询过滤器,通过samAccountName定位用户
            userSearcher.Filter = $"(&(objectCategory=person)(objectClass=user)(sAMAccountName={targetUsername}))";
            // 指定加载sidHistory属性
            userSearcher.PropertiesToLoad.Add("sidHistory");

            SearchResult userResult = userSearcher.FindOne();
            if (userResult == null)
            {
                Console.WriteLine($"未找到用户:{targetUsername}");
                return;
            }

            using (DirectoryEntry userEntry = userResult.GetDirectoryEntry())
            {
                if (userEntry.Properties.Contains("sidHistory"))
                {
                    // 遍历并移除所有sidHistory值,与PowerShell的移除逻辑对齐
                    PropertyValueCollection sidHistoryEntries = userEntry.Properties["sidHistory"];
                    while (sidHistoryEntries.Count > 0)
                    {
                        sidHistoryEntries.Remove(sidHistoryEntries[0]);
                    }

                    // 提交修改到AD
                    userEntry.CommitChanges();
                    Console.WriteLine($"已成功清除用户 {targetUsername} 的SidHistory属性");
                }
                else
                {
                    Console.WriteLine($"用户 {targetUsername} 没有SidHistory属性可清除");
                }
            }
        }
    }
}

注意事项

  • 项目需引用System.DirectoryServices程序集
  • 运行代码的账号必须拥有修改目标AD用户属性的权限
  • 请将ldapDomainPath替换为实际的域LDAP路径,也可指定域控制器地址(如LDAP://dc01.yourdomain.com)
  • 代码中通过循环移除所有SidHistory值,确保彻底清除该属性,和你提供的PowerShell操作逻辑完全一致

内容的提问来源于stack exchange,提问作者shital

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:12:48