如何使用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
相关产品推荐
相关产品推荐

