Я работаю над получением значений из Active Directory из задачи сценария в C# (3.5 framework) в SSIS. Код для этого, похоже, работает нормально. Я использую вложенный цикл с внешними циклами, которые не являются многозначными и вставляют их в таблицу с хранимой процедурой, а затем передают PK этой строки, которая будет использоваться как FK во втором цикле на второй хранимую процедуру, которая вставляет все группы, к которым принадлежит пользователь во второй таблице.Значения полей описания Active Directory не отображаются
Моя проблема: я не могу получить какие-либо значения из того, что, по моему мнению, должно быть полем Description
, в котором должно содержаться описание каждой отдельной группы. Если я пройду через него и проверит количество объектов описания, он покажет 0. Используя тот же код, чтобы проверить количество Memberof
, я получаю количество групп, к которым принадлежит пользователь. Другая часть, которую я не понимаю, я получаю значения из поля Description
во внешнем цикле, но это ближе к комментариям пользовательской записи, а не к описаниям отдельных групп. Как будто мой Description
не является многозначным. Но кто-то еще может подтвердить через портал AD, что поле Description
имеет значения, которые описывают, что каждая группа. Я немного в тупике. См. Код ниже.
DirectoryEntry entry = new DirectoryEntry("LDAP:[my address]");
DirectorySearcher Dsearch = new DirectorySearcher(entry);
Dsearch.Filter = "(&(objectClass=User))";
foreach (SearchResult sResultSet in Dsearch.FindAll())
{
(code continues from original post)
using (SqlConnection dataConnection = new SqlConnection([mysqlconnection]))
{
using (SqlCommand dataCommand = dataConnection.CreateCommand())
{
dataCommand.CommandText = "ActiveDirectory.InsertParentRecords";
dataCommand.CommandType = CommandType.StoredProcedure;
dataCommand.Parameters.AddWithValue("@PackageLogId", Dts.Variables["PackageLogId"].Value.ToString());
dataCommand.Parameters.AddWithValue("@cn", GetProperty(sResultSet, "cn"));
dataCommand.Parameters.AddWithValue("@givenName", GetProperty(sResultSet, "givenName"));
dataCommand.Parameters.AddWithValue("@initials", GetProperty(sResultSet, "initials"));
dataCommand.Parameters.AddWithValue("@sn", GetProperty(sResultSet, "sn"));
dataCommand.Parameters.AddWithValue("@mail", GetProperty(sResultSet, "mail"));
dataCommand.Parameters.AddWithValue("@Name", GetProperty(sResultSet, "Name"));
dataCommand.Parameters.AddWithValue("@middleName", GetProperty(sResultSet, "middleName"));
dataCommand.Parameters.AddWithValue("@title", GetProperty(sResultSet, "title"));
dataCommand.Parameters.AddWithValue("@employeeID", GetProperty(sResultSet, "employeeID"));
dataCommand.Parameters.AddWithValue("@employeeNumber", GetProperty(sResultSet, "employeeNumber"));
dataCommand.Parameters.AddWithValue("@objectSid", ConvertSidToString((byte[])sResultSet.Properties["objectSid"][0]));
dataCommand.Parameters.AddWithValue("@userAccountControl", tempuserAccountControl);
dataCommand.Parameters.AddWithValue("@whenCreated", GetProperty(sResultSet, "whenCreated"));
dataCommand.Parameters.AddWithValue("@distinguishedName", GetProperty(sResultSet, "distinguishedName"));
dataCommand.Parameters.AddWithValue("@badPasswordTime", Convert.ToString(badPasswordTime)); //Issues!!
dataCommand.Parameters.AddWithValue("@badPwdCount", GetProperty(sResultSet, "badPwdCount"));
dataCommand.Parameters.AddWithValue("@memberof", GetProperty(sResultSet, "memberof"));
dataCommand.Parameters.AddWithValue("@samaccountname", GetProperty(sResultSet, "samaccountname"));
dataCommand.Parameters.AddWithValue("@Description", GetProperty(sResultSet, "Description"));
dataCommand.Parameters.AddWithValue("@maxPwdAge", GetProperty(sResultSet, "maxPwdAge")); //Issues!!
dataCommand.Parameters.AddWithValue("@pwdLastSet", pwdLastSet); //Issues!!
dataCommand.Parameters.AddWithValue("@LockOutTime", Convert.ToString(LockOutTime)); //Issues!!
if (disabled == false) //Issues!!
dataCommand.Parameters.AddWithValue("@Acctdisabled", '0');
else
dataCommand.Parameters.AddWithValue("@Acctdisabled", '1');
dataCommand.Parameters.AddWithValue("@displayname", GetProperty(sResultSet, "displayname"));
dataCommand.Parameters.AddWithValue("@twofactor", twofactor);
dataCommand.Parameters.AddWithValue("@skiprecord", skiprecord);
dataCommand.Parameters.Add("@DetailID", SqlDbType.Int);
dataCommand.Parameters["@DetailID"].Direction = ParameterDirection.Output;
dataConnection.Open();
dataCommand.ExecuteScalar();
dataConnection.Close();
Counter++;
DetailID = (int)dataCommand.Parameters["@DetailID"].Value;
}
}
using (SqlConnection dataConnection = new SqlConnection[mysqlconnection]))
{
using (SqlCommand dataCommand = dataConnection.CreateCommand())
{
dataConnection.Open();
int groupCount = sResultSet.Properties["memberOf"].Count;
int DescriptionCount = sResultSet.Properties["Description"].Count;
for (int counter = 0; counter < groupCount; counter++)
{
dataCommand.CommandText = "ActiveDirectory.InsertMemberOf";
dataCommand.CommandType = CommandType.StoredProcedure;
dataCommand.Parameters.Clear();
dataCommand.Parameters.AddWithValue("@PackageLogId", Dts.Variables["PackageLogId"].Value.ToString());
dataCommand.Parameters.AddWithValue("@DetailID", DetailID);
if (sResultSet.Properties.Contains("Description"))
{
dataCommand.Parameters.AddWithValue("@Group", sResultSet.Properties["Description"][counter].ToString());
}
else
{
dataCommand.Parameters.AddWithValue("@Group", "n/a");
}
dataCommand.Parameters.AddWithValue("@memberOf", sResultSet.Properties["memberOf"][counter]);
dataCommand.ExecuteScalar();
InnerCounter++;
}
} //End of DataCommand
} //End of Data Connection
Debug.WriteLine(GetProperty(sResultSet, "displayname") + " " + Counter + ", " + InnerCounter + ", " + GetProperty(sResultSet, "userAccountControl"));
InnerCounter = 0;
} //End of For Each Loop
Добавлен код, показывающий, как sResultSet заполняется в edit, @billinkc –
Можете ли вы подключиться к ADSI Edit http://technet.microsoft.com/en-us/library/cc773354(v=ws.10).aspx и убедитесь, что в этой области? –
Я еще не пробовал (не на работе), но у меня есть кто-то, кто прошел через AD Portal, чтобы проверить, что описание на имя группы –