c # DirectoryEntry InvokeSet HomeDirectory и HomeDrive, ошибки - PullRequest
3 голосов
/ 27 сентября 2011

Я пытаюсь изменить настройку Profiles / Home Directory / Home Drive для каждого пользователя AD в указанном OU,

Ниже приведен очень простой код, который должен достичь этого навыка, но вместо этого выбрасываетследующее исключение:

Запрошенная операция не удовлетворяет одному или нескольким ограничениям, связанным с классом объекта.

У кого-нибудь была эта проблема, и если да, естьспособ это исправить?

Спасибо.

DirectoryEntry Entry = new DirectoryEntry("LDAP://OU=Company,DC=corp,DC=Placeholder,DC=com", null, null, AuthenticationTypes.Secure);

DirectorySearcher Searcher = new DirectorySearcher(Entry);
Searcher.SearchScope = SearchScope.Subtree;

Searcher.PropertiesToLoad.Add("sAMAccountName");
Searcher.Filter = "(&(objectClass=user)(objectCategory=person))";

foreach (SearchResult AdObj in Searcher.FindAll())
{
   Entry.InvokeSet("HomeDirectory", @"\\winfileserver\" + Convert.ToString(AdObj.Properties["sAMAccountName"][0]));
   Entry.InvokeSet("HomeDrive", "H");
   Entry.CommitChanges();
}
catch (Exception ex)
{
   richTextBox1.Text += ex.Message;
}

Ответы [ 2 ]

5 голосов
/ 27 сентября 2011

Нет причин также вызывать InvokeSet. Это правильный способ сделать это:

foreach (SearchResult AdObj in Searcher.FindAll()) { 
  DirectoryEntry user = AdObj.GetDirectoryEntry(); 
  user.Properties["HomeDirectory"].Value = @"\\winfileserver\" + Convert.ToString(AdObj.Properties["sAMAccountName"][0]); 
  user.Properties["HomeDrive"].Value = "H"; 
  user.CommitChanges(); 
} 
2 голосов
/ 27 сентября 2011

Похоже, вы используете Entry, который указывает на корневой каталог, а не на объект, который вы нашли, и поэтому вызов не удался.

Полагаю, вы можете изменить цикл foreach на:

foreach (SearchResult AdObj in Searcher.FindAll()) {
  DirectoryEntry user = AdObj.GetDirectoryEntry();
  user.InvokeSet("HomeDirectory", @"\\winfileserver\" + Convert.ToString(AdObj.Properties["sAMAccountName"][0]));
  user.InvokeSet("HomeDrive", "H");
  user.CommitChanges();
}
...