Я использую Windows 2008 R2 Server и пытаюсь добавить пользователя в Active Directory.
Я могу сохранить идентификатор пользователя длиной менее 20 символов. Но когда я пытаюсь увеличить это значение до 30 символов, я получаю такую ошибку:
“System.DirectoryServices.DirectoryServicesCOMException (0x8007001F): A device attached to the system is not functioning. (Exception from HRESULT: 0x8007001F)”
Эта ошибка, когда я искал в сети, дает мне различные ссылки, в которых говорится, что:
Убедитесь, что проблема вызвана длиной sAMAccountName.
В документе SAM-Account-Name также указывается, что его длина не должна превышать 20 символов.
Я использую приведенный ниже код для добавления пользователя в Active Directory.
public static void AddUser(ADUser adUser)
{
if (_logger.IsDebugEnabled)
_logger.Debug("ADHelper.cs: Enter AddUser");
// Local variables
DirectoryEntry oDE = null;
DirectoryEntry oDENewUser = null;
DirectoryEntries oDEs = null;
try
{
oDE = GetDirectoryEntry(GetADPath(adUser.UserType));
// 1. Create user account
oDEs = oDE.Children;
oDENewUser = oDEs.Add("CN=" + adUser.UserName, "user");
// 2. Set properties
SetProperty(oDENewUser, Constants.ADAttributes.givenName, adUser.FirstName);
SetProperty(oDENewUser, Constants.ADAttributes.initials, adUser.MiddleInitial);
SetProperty(oDENewUser, Constants.ADAttributes.sn, adUser.LastName);
SetProperty(oDENewUser, Constants.ADAttributes.mail, adUser.Email);
SetProperty(oDENewUser, Constants.ADAttributes.sAMAccountName, adUser.UserName);
SetProperty(oDENewUser, Constants.ADAttributes.ChallengeQuestion, adUser.PasswordChallengeQuestion);
SetProperty(oDENewUser, Constants.ADAttributes.ChallengeAnswer, adUser.PasswordChallengeAnswer);
SetProperty(oDENewUser, Constants.ADAttributes.ChallengeQuestion2, adUser.PasswordChallengeQuestion2);
SetProperty(oDENewUser, Constants.ADAttributes.ChallengeAnswer2, adUser.PasswordChallengeAnswer2);
// Sharepoint changes
if (adUser.CompanyGroupSupplier != string.Empty)
{
SetProperty(oDENewUser, Constants.ADAttributes.CompanyGroupSupplier, adUser.CompanyGroupSupplier);
}
if (adUser.PersonalGroupAddress != string.Empty)
{
SetProperty(oDENewUser, Constants.ADAttributes.PersonalGroupAddress, adUser.PersonalGroupAddress);
}
if (adUser.PersonalGroupPhone != string.Empty)
{
SetProperty(oDENewUser, Constants.ADAttributes.PersonalGroupPhone, adUser.PersonalGroupPhone);
}
// Sharepoint changes
oDENewUser.CommitChanges();
// 3. Set password
SetPassword(oDENewUser.Path, adUser.Password);
// 4. Enable account
EnableAccount(oDENewUser);
oDENewUser.Close();
oDE.Close();
if (_logger.IsDebugEnabled)
_logger.Debug("ADHelper.cs: Exit AddUser");
}
catch (ApplicationException appex)
{
if (_logger.IsErrorEnabled)
_logger.Error("ADHelper.cs: Exception occurred in AddUser. Message: ", appex);
throw appex;
}
catch (Exception ex)
{
if (_logger.IsErrorEnabled)
_logger.Error("ADHelper.cs: Exception occurred in AddUser. Message: ", ex);
throw ex;
}
finally
{
if (oDENewUser != null)
{
oDENewUser.Dispose();
oDENewUser = null;
}
if (oDEs != null)
{
oDEs = null;
}
if (oDE != null)
{
oDE.Dispose();
oDE = null;
}
}
}
Как я могу увеличить длину sAMAccountName в Active Directory примерно до 30 символов?
Как вы уже нашли и указали в своем вопросе, атрибут ограничен 20 символами (Статья MSDN). Это для обратной совместимости. Это ограничение накладывает сама Active Directory, поэтому вы не можете отменить его программно.
20 символов - это ограничение для имени «Pre-Windows 2000», также известного как samAccountName.
Обратитесь к этому предыдущему ответу для получения дополнительной информации: https://serverfault.com/a/335565/20701