private List list = new List();
#region## 同步
///
/// 功能:同步
/// 创建人:Wilson
/// 创建时间:2012-12-15
///
///
public void SyncAll(DirectoryEntry entryOU)
{
DirectorySearcher mySearcher = new DirectorySearcher(entryOU, "(objectclass=organizationalUnit)"); //查询组织单位
DirectoryEntry root = mySearcher.SearchRoot; //查找根OU
SyncRootOU(root);
StringBuilder sb = new StringBuilder();
sb.Append("\r\nID\t帐号\t类型\t父ID\r\n");
foreach (var item in list)
{
sb.AppendFormat("{0}\t{1}\t{2}\t{3}\r\n", item.Id, item.Name, item.TypeId, item.ParentId);
}
LogRecord.WriteLog(sb.ToString());
MessageBox.Show("同步成功", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Exit();
}
#endregion
#region## 同步根组织单位
///
/// 功能: 同步根组织单位
/// 创建人:Wilson
/// 创建时间:2012-12-15
///
///
private void SyncRootOU(DirectoryEntry entry)
{
if (entry.Properties.Contains("ou") && entry.Properties.Contains("objectGUID"))
{
string rootOuName = entry.Properties["ou"][0].ToString();
byte[] bGUID = entry.Properties["objectGUID"][0] as byte[];
string id = BitConverter.ToString(bGUID);
list.Add(new AdModel(id, rootOuName, (int)TypeEnum.OU, "0"));
SyncSubOU(entry, id);
}
}
#endregion
#region## 同步下属组织单位及下属用户
///
/// 功能: 同步下属组织单位及下属用户
/// 创建人:Wilson
/// 创建时间:2012-12-15
///
///
///
private void SyncSubOU(DirectoryEntry entry, string parentId)
{
foreach (DirectoryEntry subEntry in entry.Children)
{
string entrySchemaClsName = subEntry.SchemaClassName;
string[] arr = subEntry.Name.Split('=');
string categoryStr = arr[0];
string nameStr = arr[1];
string id = string.Empty;
if (subEntry.Properties.Contains("objectGUID")) //SID
{
byte[] bGUID = subEntry.Properties["objectGUID"][0] as byte[];
id = BitConverter.ToString(bGUID);
}
bool isExist = list.Exists(d => d.Id == id);
switch (entrySchemaClsName)
{
case "organizationalUnit":
if (!isExist)
{
list.Add(new AdModel(id, nameStr, (int)TypeEnum.OU, parentId));
}
SyncSubOU(subEntry, id);
break;
case "user":
string accountName = string.Empty;
if (subEntry.Properties.Contains("samaccountName"))
{
accountName = subEntry.Properties["samaccountName"][0].ToString();
}
if (!isExist)
{
list.Add(new AdModel(id, accountName, (int)TypeEnum.USER, parentId));
}
break;
}
}
}
#endregion