2011-11-03 88 views
4

在Active Direcotry mmc管理單元中,您看不到屬於「未設置」的屬性。當您使用ADSIEDIT.MSC工具時,如果屬性值爲空,您會將它們視爲「未設置」。.Net代碼將Active Directory屬性設置爲「未設置」

如何在.Net代碼中將屬性設置爲「未設置」?

這是Powershell的答案,但我需要用一些.Net代碼(VB.Net/C#)來完成。 http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/d6d0bfa1-73da-41ea-a7f5-f622de9f7d1b/

ps msExchHideAddressLists是罪魁禍首屬性,當其在此域中的True或False時,它會阻止從AD複製到Sharepoint的用戶信息。

回答

3

MSDN你可以發現:

在支持LDAP的常用目錄,沒有一個值的屬性不存在。當通過更改,替換或追加操作將屬性值設置爲非空值時,如果該屬性尚不存在,則會創建該屬性。同樣,如果一個屬性被修改爲沒有值(或值),整個屬性被刪除。有時您可能想要將屬性設置爲null。儘管在支持LDAP的目錄中不存在此概念,但您可以通過完全刪除該屬性並指定要清除該屬性來完成此操作。

下面是使用System.DirectoryServices一個例子:

/* Connection to Active Directory 
*/ 
DirectoryEntry deBase = new DirectoryEntry("LDAP://192.168.183.220:389/dc=societe,dc=local", "administrateur", "adm"); 

/* Directory Search 
*/ 
DirectorySearcher dsLookForOUs = new DirectorySearcher(deBase); 
dsLookForOUs.Filter = "(objectCategory=organizationalUnit)"; 
dsLookForOUs.SearchScope = SearchScope.Subtree; 
dsLookForOUs.PropertiesToLoad.Add("cn"); 
dsLookForOUs.PropertiesToLoad.Add("ou"); 
dsLookForOUs.PropertiesToLoad.Add("telephoneNumber"); 

SearchResultCollection srcOUs = dsLookForOUs.FindAll(); 

foreach (SearchResult srOU in srcOUs) 
{ 
    Console.WriteLine("{0}", srOU.Path); 
    DirectoryEntry de = srOU.GetDirectoryEntry(); 
    if (de.Properties["TelephoneNumber"].Value!= null) 
    { 
    // Both solutions are working. Don't forget to commit 

    //de.Properties["TelephoneNumber"].Clear(); 
    de.Properties["TelephoneNumber"].Value=null; 
    de.CommitChanges(); 
    } 
} 
+0

輕微修正:屬性是否可以具有任何值(或空值)取決於屬性的語法。例如,IA5String被允許爲零長度。 –

+0

然後這不被視爲'沒有價值',而是'空值'。沒有值真的是空的。 – JPBlanc